线性表 (单链表、循环链表-python实现)
一、线性表
线性表的定义:
线性表是具有相同数据类型的有限数据的序列。
线性表的特点:
出了第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外有且只有一个后继。
线性表是一种逻辑结构,表示元素之间的一一的相邻关系,顺序表和链表是指存储结构,两者属于不同的概念。
线性表的顺序表示:
线性表的顺序存储即数组的动态、静态分配,特点是可以随机访问。
线性表的链式表示:
线性表的链式存储即单链表、双连表、循环单链表以及循环双连表,特点是随机插入,不可随机访问。
单链表的实现(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实现)的更多相关文章
- Python线性表——单链表
1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继,而序列头元素没有直接前驱 ...
- JAVA实现具有迭代器的线性表(单链表)
一,迭代器的基本知识: 1,为什么要用迭代器?(迭代:即对每一个元素进行一次“问候”) 比如说,我们定义了一个ADT(抽象数据类型),作为ADT的一种实现,如单链表.而单链表的基本操作中,大部分需要用 ...
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
- C数据结构 : 线性表 与 链表
一.线性表 一般表现为数组,使用一组地址连续的存储单元依次存储数据元素,如图: 它具有如下特点: 长度固定,必须在分配内存之前确定数组的长度. 存储空间连续,即允许元素的随机访问. 存储密度大,内存中 ...
- c/c++ 线性表之双向循环链表
c/c++ 线性表之双向循环链表 线性表之双向循环链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,每个节点的before都指向前一个节点,最后一个节点的下一个节点不是NUL ...
- c/c++ 线性表之单向循环链表
c/c++ 线性表之单向循环链表 线性表之单向循环链表 不是存放在连续的内存空间,链表中的每个节点的next都指向下一个节点,最后一个节点的下一个节点不是NULL,而是头节点.因为头尾相连,所以叫单向 ...
- C语言 严蔚敏数据结构 线性表之链表实现
博主最近在考成都大学皇家计算机科学与技术专业,复习专业课数据结构,正好学习到线性结构中的线性表用链表这种存储结构来实现. 首先,数据结构包括1.数据的操作2.逻辑结构3.存储结构(数据结构三要素. 直 ...
- 单链表的python实现
首先说下线性表,线性表是一种最基本,最简单的数据结构,通俗点讲就是一维的存储数据的结构. 线性表分为顺序表和链接表: 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存 ...
- Python与数据结构[0] -> 链表/LinkedList[0] -> 单链表与带表头单链表的 Python 实现
单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...
随机推荐
- Deployment failure on Tomcat 6.x. Could not copy all resources to D:\...\webapps\eptInfo. If a file is locked, you can wait until the lock times out to redeploy, or stop the server and redeploy, or ma
tomcat服务并没有启动.工程中之前引了一个包,后来这个包被删除了,但是因为已经发布过这个工程了,所以classpath中就有这个包名了,这样发布的时候也会去找这个包但是已经不存在了,所以无copy ...
- 在mui中创建aJax来请求数据..并展示在页面上
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <m ...
- (转)SQL Server 2008无法修改表的解决办法
转自:http://www.soaspx.com/dotnet/sql/mssql/sql2008/sqlserver2008_20121010_9683.html 在SQL Server 2008 ...
- Necklace
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- 磁盘配额(Quota)的应用与实践
1>什么是Quota 在Linux中,由于是多用户,多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中有少数几个用户大量占用掉了硬盘空间的话,那肯定影响其他用户的使 ...
- 【算法31】寻找数组的主元素(Majority Element)
题外话 最近有些网友来信问我博客怎么不更新了,是不是不刷题了,真是惭愧啊,题还是在刷的,不过刷题的频率没以前高了,看完<算法导论>后感觉网上很多讨论的题目其实在导论中都已经有非常好的算法以 ...
- Win10下安装msi程序包时报2503、2502错误问题及其解决办法
Win10系统下安装TortoiseSvn.Node.js时(.msi后缀的安装文件),在点击安装时老是提示2503,2502错误,因此无法安装上. 搜索了下一般都提到是权限不够引起的该问题.但是右键 ...
- IE下 input 的父级标签被 disabled 之后引发的怪异行为
前段时间做了个网盘类的项目,意外发现了这个情况 IE下,将input的父级标签增加 disabled 属性之后,input 的行为变得怪异: 1.input 背景变灰,疑似也被disabled 了. ...
- MYC编译器源码之词法分析
前文 .NET框架源码解读之MYC编译器 和 MYC编译器源码分析之程序入口 分别讲解了 SSCLI 里示例编译器的架构和程序入口,本文接着分析它的词法分析部分的代码. 词法解析的工作都由Tok类处 ...
- AI_ 视频监控-人体移动捕捉监测
总目录地址:AI 系列 总目录 需要最新源码,或技术提问,请加QQ群:538327407 我的各种github 开源项目和代码:https://github.com/linbin524 需求 为了实现 ...