线性表 (单链表、循环链表-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语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...
随机推荐
- js splice方法
处理数组的方法很多,javascript splice()算是最强大的了,它可以用于插入.删除或替换数组的元素.下面来一一介绍! 1.删除-用于删除元素,两个参数,第一个参数(要删除第一项的位置),第 ...
- Before an Exam
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93241#problem/B (654123) http://codeforces.com ...
- Robotframework-Appium 之常用API(二)
续接上一文,更多API详细如下: 注:更多官方详情信息见 http://robotframework.org/robotframework/ 28. Name: Install App Source: ...
- android java层实现hook替换method
Android上的热修复框架 AndFix 大家都很熟悉了,它的原理实际上很简单: 方法替换——Java层的每一个方法在虚拟机实现里面都对应着一个ArtMethod的结构体,只要把原方法的结构体内容替 ...
- xt
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Meteor in Action(一)起步
杜撰的名字,这个系列文章旨在记录工作中开发APP所要学习meteor的过程. 最简单的例子,运行Meteor自带的缺省的Hello world例子. 安装好Meteor后,建立一个空白目录. 然后: ...
- FTP 作业整理
一.FTP 客户端 与服务器端(没有解决黏包问题的代码) 服务器端设置 import socket import json ADDR = () sk =socket.socket() sk.bind( ...
- [USACO5.1] 乐曲主题Musical Themes
题目链接:戳我 Emmm......hash怎么做啊不会啊 这里是SA后缀数组版本的 就是先两两做差分,作为要处理后缀的数组.普通地求出来h数组之后,我们二分这个答案,然后判定是否合法就行了.是否合法 ...
- PhoneGap - 解决用nmp无法安装PhoneGap问题!
PhoneGap从2.9.0开始,只采用node安装方式,安装命令如下: npm install -g phonegap 今天我使用此命令安装PhoneGap时候,始终无法安装,在网上搜索一下,最终解 ...
- 1002. Find Common Characters
Given an array A of strings made only from lowercase letters, return a list of all characters that s ...