数组array是基本的数据结构,但它的功能有限,线性表list可以认为是扩展了功能的数组。可以自动调整大小。添加和删除元素不需要其他元素移位。

根据指针数量和指向的不同,线性表分为单向链表、双向链表和循环链表。

一、单向链表

单项链表有一个头指针,指向链表的第一个元素,除最后一个元素外,其它元素都有一个指针指向其后的元素。如图:

这种结构简单有效,可以非常方便的对链表进行遍历、查询、添加和删除元素。

class ListNode:
def __init__(self,data):
self.data=data
self.next=None class LinkList :
def __init__( self ):
self.head = None
self._size = 0
def is_empty(self):
return self.head is None
def __len__( self ):
return self._size
def __contains__( self, target ):
curNode = self.head
while curNode is not None and curNode.data != target :
curNode = curNode.next
return curNode is not None
def search(self,target):
curNode =self.head
while curNode is not None and curNode.data !=target:
curNode=curNode.next
return curNode is not None
def pre_add(self,data ):
newNode = ListNode(data )
newNode.next = self.head
self.head = newNode
self._size += 1
def append(self,data):
newNode=ListNode(data)
if self.head is None:
self.head=newNode
self._size+=1
return
curNode=self.head
while curNode.next is not None:
curNode=curNode.next
curNode.next=newNode
self._size+=1
def pre_del(self):
if self.head is None:
return
curNode=self.head
print curNode.data
self.head=curNode.next
def pop(self):
if self.head is None:
return
preNode=None
curNode=self.head
while curNode.next is not None:
preNode=curNode
curNode=curNode.next
if curNode is self.head:
print curNode.data
self.head=None
self._size-=1
else:
print curNode.data
preNode.next=curNode.next
self._size -=1 def travel(self,head):
curNode=self.head
while curNode is not None:
print curNode.data
curNode=curNode.next
def remove( self, data ):
predNode = None
curNode = self.head
while curNode is not None and curNode.data != data :
predNode = curNode
curNode = curNode.next self._size -= -1
if curNode is self.head :
self.head = curNode.next
else :
predNode.next = curNode.next
return curNode.data if __name__=='__main__':
test=LinkList()
for i in range(10):
test.append(i)
test.pop()
test.pop()
print '*********************'
test.pre_del()
test.pre_del()
print '*********************'
print test.remove(4)
print test.remove(5)
print '*********************'
test.travel(test.head)
print test.search(5)

线性表List的更多相关文章

  1. 线性表Linearlist

    顺序存储,链式存储,索引存储,散列存储 基本运算 SLIST         1.置空表 void SetNull(&L)     2.求长度 int Length(L)     3.取元素 ...

  2. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

  3. JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表

    Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...

  4. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  5. Java集合类学习笔记(各种线性表性能分析)

    ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...

  6. 动态分配的顺序线性表的十五种操作—C语言实现

    线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...

  7. Java Se :线性表

    Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...

  8. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  9. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  10. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

随机推荐

  1. PCI GXL学习之再造篇

    作者:朱金灿 来源:http://blog.csdn.net/clever101 再造一个PCI GXL?听起来是一件颇有难度的事,实际上并非不可能.本文拟从必要性.可行性和技术路线等方面谈谈再造PC ...

  2. three.js 初学小示例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Android GPS获取当前位置信息

    package com.example.gpstest; import org.apache.http.util.LangUtils; import android.content.Context; ...

  4. WPF去除边框的方法

    原文:WPF去除边框的方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangsen600/article/details/81978125 W ...

  5. 【oracle ocp 知识点二】

    1.数据库操作语言 DML在运行时下面的语句 添加一个新行到表 更新表现出一定的线 从表删除现有行 一个事务处理是由一系列的DML语句逻辑组成 A.insert 每次插入一行数据 字符和日期的须要单引 ...

  6. CUDA中block和thread的合理划分配置

    CUDA并行编程的基本思路是把一个很大的任务划分成N个简单重复的操作,创建N个线程分别执行执行,每个网格(Grid)可以最多创建65535个线程块,每个线程块(Block)一般最多可以创建512个并行 ...

  7. repo/git Android/CyanogenMod srouce code

    For getting the whole Android/CM rom source code, 1. get the repo first.2. make sure the git is inst ...

  8. PHP数组教程

    定义数组 PHP数组array是一组有序的变量,其中每个变量被叫做一个元素. 一.定义数组 可以用 array() 语言结构来新建一个数组.它接受一定数量用逗号分隔的 key => value ...

  9. 简明Python3教程 9.函数

    简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...

  10. Matlab Tricks(十九)—— 序列左右移的实现

    比如实现如下的移位操作: y(n)=x(n−k) function [y, n] = sigshift(x, m, k) n = m + k; y = x; 本身任意一个 matlab 序列本质上都是 ...