线性表 (单链表、循环链表-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语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...
随机推荐
- MongoDB安装为Windows服务方法与注意事项
MongoDB作为一个基于分布式文件存储的数据库,近两年大受追捧.数据灵活的存取方式和高效的处理使得它广泛用于互联网应用. 最近本人开始在Windows 32位平台下研究MongoDB的使用,为了方便 ...
- cmake检测g++编译器是否支持c++11
# 相关链接:https://cmake.org/cmake/help/v3.0/module/CheckCXXCompilerFlag.htmlinclude(CheckCXXCompilerF ...
- Oracle数据库多行记录转换一行并排序函数
Oracle数据库多行记录转换一行并排序方法 在ORACLE数据库查询中,我们通常会要求用到将多行记录转换成一行并排序,这时候我们自然会想到Oracle的一个“wx_concat”函数,可以将多行记录 ...
- GridView1 RowDataBound
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == ...
- Web 平台安装程序 5.0(Microsoft Web Platform Installer) 由于修改常用选择不正确导致打开就报错
如图: 解决方案.第一步先卸载 Web 平台安装程序 5.0 第二步 将你添加配的文件删除 第三步:重新安装就可以了
- NetCore入门篇:(十二)在IIS中部署Net Core程序
一.简介 微软已经为net在iis中的部署提供了良好的支持,在IIS中部署NetCore是一件很容易的事. 二.在IIS中部署Net Core程序 1.微软官方文档有详细说明.进入 2.如果你已经熟悉 ...
- C#之使用AutoUpdater自动更新客户端
安装NuGet包 在Visio studio中右击解决方案,选择管理NuGet包,搜索安装Autoupdater.NET.Official. 工作简介 从服务器下载包含更新文件的XML文件,从中获取软 ...
- 在Asp.Net MVC中实现上传图片并显示
实现思路大概分为两步: 1. 通过上传接口,将图片上传到服务器,返回文件路径给客户端: 2. 点击保存上传,将文件路径保存到数据库,如果是多张图片,路径用逗号分隔. 核心上传代码: /// <s ...
- pageadmin CMS网站制作教程:
pageadmin CMS网站建设教程:模板中如何实现信息数据共享 很多时候信息数据需要共享,一个最常用的应用场景就是手机版(独立手机,非响应式)本共享pc版本数据,下面以这个场景为例讲解. 假设手机 ...
- Day5 作业(完成)
1,有如下变量(tu是个元祖),请实现要求的功能# tu = ("alex", [11, 22, {"k1": 'v1', "k2": [& ...