线性表List
数组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的更多相关文章
- 线性表Linearlist
顺序存储,链式存储,索引存储,散列存储 基本运算 SLIST 1.置空表 void SetNull(&L) 2.求长度 int Length(L) 3.取元素 ...
- 数据结构(Java描述)之线性表
基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...
- JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表
Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- Java集合类学习笔记(各种线性表性能分析)
ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...
- 动态分配的顺序线性表的十五种操作—C语言实现
线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...
- Java Se :线性表
Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现
注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
随机推荐
- Objective-C的基础数据结构
类的数据结构 Class(指针) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 typedef struct objc_c ...
- CUDA+OpenGL混合编程
CUDA+OpenGL混合编程示例: #include <stdio.h> #include <stdlib.h> #include "GL\glew.h" ...
- AI2XAML's Bug
原文:AI2XAML's Bug My picture is like this: I use Adobe Illustator CS to draw the outline of that, I s ...
- WPF中取得系统字体列表
原文:WPF中取得系统字体列表 在GDI+中,我们可以通过如下方式取得系统所有字体: foreach(FontFamily f in FontFamily.Families){ // 处理代码} ...
- Arcgis for Javascript实现图
首先,截个图给大家看结果: 初始化状态 放大后的状态 点击选中后的状态 如上图所看到的,一般的涉及到的地图的统计涉及到上述所展示的三个状态:1.初始化状态.2.缩放后的状态:3.点击选中显示详情状态. ...
- C 语言main 函数终极探秘(&& 的含义是:如果 && 前面的程序正常退出,则继续执行 && 后面的程序,否则不执行)
所有的C程序必须定义一个称之为main的外部函数,这个函数是程序的入口,也就是当程序启动时所执行的第一个函数,当这个函数返回时,程序也将终止,并且这个函数的返回值被看成是程序成功或失败的 ...
- Microsoft.AspNet.SignalR实现弹幕(即时通讯)
引用 Microsoft.AspNet.SignalR 服务器 自定义Connection public class BarrageConnection : PersistentConnection ...
- Effection Go
Introduction: 新语言, 新思维 Formatting Indentation: 默认tab Line Length: 无限制, 会自动换行 Parentheses: 圆括号, 无限制, ...
- Boost的某些库还是需要生成二进制的库的,必须安装才行,以及使用库的方法
头文件就是库使用者最常问的问题就是“我该怎么安装Boost”,这个也是我一开始最关心的问题,Boost这点做的很好,将大部分实现都封装在头文件里,所以对于一些基本的Boost库,其实是不需要安装的,只 ...
- 如何快速生成数据文件(fsutil命令,使用CreateFile和SetEndOfFile API函数,fopen和fseek RTL函数)
1. fsutil 命令 文件会瞬间生成,因为实际上Windows只是分配了名称.地址和空间给该文件,并没有读写任何文件内容 100M=1024x1024x100 fsutil file create ...