一、线性表

  线性表的定义:

    线性表是具有相同数据类型的有限数据的序列。

  线性表的特点:

    出了第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外有且只有一个后继。

    线性表是一种逻辑结构,表示元素之间的一一的相邻关系,顺序表和链表是指存储结构,两者属于不同的概念。

  线性表的顺序表示:

    线性表的顺序存储即数组的动态、静态分配,特点是可以随机访问。

  线性表的链式表示:

    线性表的链式存储即单链表、双连表、循环单链表以及循环双连表,特点是随机插入,不可随机访问。

    单链表的实现(python):

#定义每个节点
class Node:
def __init__(self,data):
self.data=data
self.next=None class linkList:
#初始化头结点
def __init__(self,n):
self.head=Node(None)
self.n=n
#头插法建立链表
def listCreateForward(self):
if self.n==0:
return False
else:
temp=self.head
for i in range(1,self.n+1):
print('请输入第{0}个节点:'.format(i))
num = input()
node = Node(num)
node.next=temp.next
temp.next = node
#尾插法建立链表
def listCreateBackward(self):
if self.n==0:
return False
else:
temp=self.head
for i in range(1,self.n+1):
print('请输入第{0}个节点:'.format(i))
num = input()
node = Node(num)
temp.next=node
temp=node
#读取链表
def readList(self):
if self.n==0:
print("空链表!")
else:
temp = self.head
while temp.next!=None:
temp = temp.next
print(temp.data,end=' ')
#链表长度
def Length(self):
i=0
temp=self.head
while temp.next!=None:
temp=temp.next
i+=1
return i
#按值查找
def locateElem(self,num):
i = 0
temp = self.head
while temp.next != None:
temp = temp.next
i += 1
if int(temp.data)==num:
return i
return None
#按位置查找
def getElem(self,j):
i = 0
temp = self.head
while temp.next != None:
temp = temp.next
i += 1
if int(j)==i:
return temp.data
return None
#按位置插入数字
def listInsert(self,j,num):
if int(j)<0:
return None
elif self.Length()<j:
return None
else:
i = 0
temp = self.head
while temp.next != None:
i += 1
if int(j) == i:
node=Node(num)
node.next=temp.next
temp.next=node
temp = temp.next
#删除特定元素
def deleteData(self,num):
temp=self.head
while True:
if temp.next==None:
break
#当这个节点是尾节点时
if int(temp.next.data)==num and temp.next.next==None:
temp.next=None
break
elif int(temp.next.data)==num:
temp.next=temp.next.next
temp=temp.next
#删除特定位置的元素
def deleteElem(self,j):
if j==1:
self.head.next=self.head.next.next
elif j==self.Length() :
temp=self.head.next
while True:
if temp.next.next==None:
temp.next=None
break
temp=temp.next
elif j<self.Length():
i=2
temp=self.head.next
while True:
if i==j:
temp.next=temp.next.next
else:
print('erro!!!!')
return None linklist1=linkList(5)
linklist1.listCreateBackward()
linklist1.readList()
length=linklist1.Length()
print('length={0}'.format(length))
locate=linklist1.locateElem(5)
print('5在位置{0}'.format(locate))
data=linklist1.getElem(3)
print('第3个位置是{0}'.format(data))
linklist1.listInsert(1,111)
linklist1.readList()
print('\n删除111(第一个元素):')
linklist1.deleteData(111)
linklist1.readList()
print('\n删除5(末尾的元素)')
linklist1.deleteData(5)
linklist1.readList()
print('\n删除第一个元素:')
linklist1.deleteElem(1)
linklist1.readList()
print('\n删除末尾的元素')
linklist1.deleteElem(3)
linklist1.readList() 结果:
请输入第1个节点:
1
请输入第2个节点:
2
请输入第3个节点:
3
请输入第4个节点:
4
请输入第5个节点:
5
1 2 3 4 5 length=5
5在位置5
第3个位置是3
111 1 2 3 4 5
删除111(第一个元素):
1 2 3 4 5
删除5(末尾的元素)
1 2 3 4
删除第一个元素:
2 3 4
删除末尾的元素
2 3

    循环链表的实现(python):其它部分与单链表相似

#定义节点
class Node:
def __init__(self,data):
self.data=data
self.next=None class circleList:
# 初始化头结点
def __init__(self,n):
self.head=Node(None)
self.head.next=self.head
self.n = n # 头插法建立链表-
def listCreateForward(self):
if self.n==0:
return False
else:
temp=self.head
for i in range(1,self.n+1):
print('请输入第{0}个节点:'.format(i))
num = input()
node = Node(num)
node.next=temp.next
temp.next = node
          temp=temp.next
# 尾插法建立链表
def listCreateBackward(self):
if self.n==0:
return False
else:
temp=self.head
for i in range(1,self.n+1):
print('请输入第{0}个节点:'.format(i))
num = input()
node = Node(num)
temp.next=node
temp=node
temp.next = self.head
#读取循环链表
def readList(self):
if self.n==0:
print("空链表!")
else:
temp = self.head
while temp.next!=self.head:
temp = temp.next
print(temp.data,end=' ') linklist1=circleList(5)
linklist1.listCreateForward()
linklist1.readList()
linklist1=circleList(5)
linklist1.listCreateBackward()
linklist1.readList()

线性表 (单链表、循环链表-python实现)的更多相关文章

  1. Python线性表——单链表

    1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继,而序列头元素没有直接前驱 ...

  2. JAVA实现具有迭代器的线性表(单链表)

    一,迭代器的基本知识: 1,为什么要用迭代器?(迭代:即对每一个元素进行一次“问候”) 比如说,我们定义了一个ADT(抽象数据类型),作为ADT的一种实现,如单链表.而单链表的基本操作中,大部分需要用 ...

  3. 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

    数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...

  4. 数据结构之 线性表---单链表操作A (删除链表中的指定元素)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...

  5. C数据结构 : 线性表 与 链表

    一.线性表 一般表现为数组,使用一组地址连续的存储单元依次存储数据元素,如图: 它具有如下特点: 长度固定,必须在分配内存之前确定数组的长度. 存储空间连续,即允许元素的随机访问. 存储密度大,内存中 ...

  6. c/c++ 线性表之双向循环链表

    c/c++ 线性表之双向循环链表 线性表之双向循环链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,每个节点的before都指向前一个节点,最后一个节点的下一个节点不是NUL ...

  7. c/c++ 线性表之单向循环链表

    c/c++ 线性表之单向循环链表 线性表之单向循环链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,最后一个节点的下一个节点不是NULL,而是头节点.因为头尾相连,所以叫单向 ...

  8. C语言 严蔚敏数据结构 线性表之链表实现

    博主最近在考成都大学皇家计算机科学与技术专业,复习专业课数据结构,正好学习到线性结构中的线性表用链表这种存储结构来实现. 首先,数据结构包括1.数据的操作2.逻辑结构3.存储结构(数据结构三要素. 直 ...

  9. 单链表的python实现

    首先说下线性表,线性表是一种最基本,最简单的数据结构,通俗点讲就是一维的存储数据的结构. 线性表分为顺序表和链接表: 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存 ...

  10. Python与数据结构[0] -> 链表/LinkedList[0] -> 单链表与带表头单链表的 Python 实现

    单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...

随机推荐

  1. GitHub 安装配置

    1:到 Github 注册 页面中注册,填写用户名.邮箱和密码 选择免费服务 步骤三可以根据自身喜好勾选或者直接跳过 2.1.2 创建远程仓库 创建完账号后,可以开始创建仓库 但是这里我们还没有验证邮 ...

  2. CentOS中的一些小技巧和特殊知识

    一:软件: firefox 1.在tab栏右键可以打开上一次关闭的标签. 2.在上面的搜索栏可以添加搜索引擎,这样就不需要再打开标签页访问搜索引擎主页来搜索了. 3.获取firefox下载弹框的资源U ...

  3. maven项目诡异的问题

    install 的 war包中 dao 文件夹下没有xml文件 解决:重新注册为maven项目

  4. [FMX]在你的跨平台应用中使用剪贴板进行复制粘贴

    [FMX]在你的跨平台应用中使用剪贴板进行复制粘贴 2017-08-10 • Android.C++ Builder.Delphi.iOS.教程 • 暂无评论 • swish •浏览 516 次 VC ...

  5. SQL Server 2008 清空删除日志文件(瞬间日志变几M)

    sql 在使用中每次查询都会生成日志,但是如果你长久不去清理,可能整个硬都堆满哦,笔者就遇到这样的情况,直接网站后台都进不去了.下面我们一起来学习一下如何清理这个日志吧 SQL2008清空删除日志: ...

  6. 老码农冒死揭开行业黑幕:如何编写无法维护的代码[ZZ]

    下面是一篇有意思的"代码大全",可谓 逆软件工程. 老码农冒死揭开行业黑幕:如何编写无法维护的代码 原文如下 让自己稳拿铁饭碗 ;-) – Roedy Green(翻译版略有删节) ...

  7. IDEA13 SVN配置

    这个算是解决了,idea13是支持svn 1.8. 步骤: 1.下载svn客户端软件,小乌龟:TortoiseSVN.安装的时候,一定要选择安装svn命令行的那个选项.当前版本1.8默认只会忽略命令行 ...

  8. DBCC--SHRINKDATABASE

    --DBCC SHRINKDATABASE --收缩数据库 --USAGE: dbcc SHRINKDATABASE ( { 'database_name' | database_id | 0 } [ ...

  9. 关于linq的几个小例子

    private void button1_Click(object sender, EventArgs e) { ] { ,,,,,,}; var result0 = from num in numb ...

  10. php重写session的存储机制

    重写session的存储机制 Session数据区 默认以 文件的形式存储与服务器操作系统临时目录中! 当 session数据区过多时,文件形式的存储,操作速度变慢.磁盘的读写(IO,input/ou ...