导航:首页 > 编程语言 > python中链表

python中链表

发布时间:2023-05-29 02:28:52

python中的链表和列表有什么区别

列表是python的一种数据结构,每个列表可以没有或者是多个元素,每个元素可以是字符,数据,列表,或者是字典。
python中没有指针,所以对于C语言来的链表,只能是一个模拟链表,一般都是通过一个class来定义node,node中的self。value就是对应的数据,self。p指向下一个node。
通过上面的分析我们可以看到他们有相同的地方就是他们都是数据存储的手段,列表是python的基础元素,范围很广,数据是连续存放,链表相对来说应用的范围比较少,数据是不连续存放,一般都是用于高效合并的数据结构。

❷ Python 如何实现单链表按照奇偶位置拆分成两个链表

看见最佳答案回答的那么垃圾,真心伤心,python这个偷懒的编程语言,写的这冗余......

#coding=utf-8
nums=[1,2,3,4,5,6,7]

defsplit(nums):
a,b=[],[]
[a.append(num)ifnums.index(num)%2elseb.append(num)fornuminnums]
returna,b

if__name__=='__main__':
a,b=split(nums)
print('偶数角标链表:',a)
print('奇数角标链表:',b)

❸ python编程中实现linkedlist(链表)报错是因为什么,怎么解决

楼主你好!

看你的代码存在很多问题,一个个来说明

1)首先你代码的报错源于你想用list来展开你的SLinkedList类,在python中,除非内置的可迭代对象外,其他都需要实现__iter__()函数,才能用list来进行展开。注意:判断一个对象是否可迭代,请使用isinstance(obj, Iterable)来判断obj是不是可以迭代,Iterable需要从collections中导入

2)插入的方法存在严重问题,按楼主的方法插入的话,因为头节点始终在变,所以当你需要遍历链表的时候就会找不到头节点;

3)pop的方法实现也有问题,因为是单向链,所以无法从末节点开始删除,只能删除头节点

4)top方法的意图未知

其他:

下面列举了一下我修改后的方案,做了一些锦上添花的操作,每个基本操作都会返回链表对象,这样就可以使用链式操作来写代码;迭代函数使用yield来实现,避免展开时占用不必要的内存。

另:我的展开时直接取链表中各个节点的元素,加了一些关键注释在代码中;

#-*-coding:utf-8-*-
classNode:
def__init__(self):
'''
elm:节点元素
nxt:下个节点指针
'''
self.elm,self.nxt=None,None

classSLinkedList:
def__init__(self):
'''
head:链表头
end_point:链表尾
'''
self.head=None
self.end_point=None

defpush(self,x):
p=Node()
p.elm=x
ifself.headisNone:
self.head=p
self.end_point=p
returnself
self.end_point.nxt=p
self.end_point=p
returnself

defpop(self):
'''因为实现的是一个单链表,所以只能从头开始删除节点'''
ifself.head.nxtisNone:
return
self.head=self.head.nxt
returnself

def__iter__(self):
temp_node=self.head
whiletemp_nodeisnotNone:
yieldtemp_node.elm
temp_node=temp_node.nxt


if__name__=='__main__':
'''增加1,2,5三个元素,并删除一个头节点'''
mylinklist=SLinkedList().push(1).push(2).push(5).pop()
print(list(mylinklist))


其实python这个语言使用链表有些画蛇添足,但是如果拿来当作需求练手也无妨。

望采纳,谢谢!

❹ python 如何用单向循环链表实现堆栈

Node没什么问题,就是变量定义的时候是一个下划线而不是两个

Stack这里有点问题,

(不知道你这里为啥需要做成一个循环的链表,不过不管了)

  1. 首先你得定义一个head和一个tail,这样的话才能把tail和head连接形成一个循环

  2. 初始化Stack的话把head和tail都设置成None表示这是个空的stack

  3. push的话看你喜欢这么写了,比较喜欢的是把push进去的Node作为新的head,然后修改一下self._head为新Node,然后修改新Node的next为老的head,再连接一下Tail和Head便可,这样就省掉一些循环

  4. pop的话就加一些判定好了,首先看Head是不是None,如果是就说明Stack是空的。如果发现Tail和Head都是同一个的话就说明Stack里就一项了,提取完Head之后就设置Stack为空吧。然后先提取Head,然后读取Head后面的那一个Node并且设置为新的Head,然后再连接一下Tail和Head便可

  5. 附上代码供参考.

classNode:
def__init__(self,newData):
self._data=newData
self._next=None

defgetData(self):
returnself._data

defgetNext(self):
returnself._next

defsetData(self,newData):
self._data=newData

defsetNext(self,newNode):
self._next=newNode

classStack:
def__init__(self):
self._head=None
self._tail=None

defpush(self,data):
print'Push',data,'intostack'
new=Node(data)
cur=self._head
end=self._tail
ifcurisNone:
self._head=new
new.setNext(new)
self._tail=new
else:
new.setNext(self._head)
self._head=new
self._tail.setNext(new)

defpop(self):
ifself._headisnotNone:
cur=self._head
print'pop',cur.getData(),'outofstack'
ifcur.getNext()isnotcur:
self._head=cur.getNext()
self._tail.setNext(self._head)
else:
self._head=None
self._tail=None
else:
print'Stackisempty'


my=Stack()
foriinrange(5):
my.push(i)

foriinrange(6):
my.pop()

❺ 用Python实现单链表的头插,尾插和中插

头插,从链竖困表的头启迹部插入一个节点,依次类推。中插,就是给定任意位置(index),然后插入该节点。尾插就是从链表的尾部悄纤并依次插入节点Node

❻ python如何判断一个链表是否为环状

设置两个指针,开始都指向链表头,然后其中一个指针每次向前走一步,另一个指针每次向前走两步,如果快的遇到NULL了,证明该链表中没有环,如果有环,快的指针每次都要比慢的多走一步,最终两个指针会相遇,(注意:这里快指针不会跳过慢指针而不相遇,因为它每次都只比慢指针多走一个单位) bool judge(list *head){if(head == NULL){return false;//没有环} list *pFast = head; list *pSlow = head; while(pFast-next != NULL && pFast-next-next != NULL){pFast = pFast-next-next; pSlow = pSlow-next;

❼ python-033-实现栈-使用链表实现-提高时间复杂度

栈在我们之前的文章中就说陵前明过了,想了解的去看一下030即可。

之前我们实现的栈穗汪高,算法时间复杂度在摊销的情况下,是O(1),其底层是python的列表,是一种动态数组,在内存中是一个固定长度的数组,是无法改变大小的,只有重新换一个更大的数组来装新的数据猜尺。虽然实现起来非常简单,但是并不够完美。

在我们最开始的几篇文章中,很详细的介绍了链表的各种使用方式。之前实现链表时,只声明了节点对象,但是我们在程序的使用中应该把链表作为一个整体,作为一个对象来使用,这样封装性更好。

今天就不写这个链表了,我们利用在栈类中定义一个 嵌套类 来做为链表的节点对象,因为创建节点的操作非常多,所以我们用 slots 来声明节点的两个成员变量,来减少内存的使用,提高效率。

链表是一种可以随时改变的数据结构。我们可以随时改变他的结构。

实现如下:

这次实现的栈的每一个方法操作,其时间复杂度都为O(1),不需要摊销。这与用数组实现的栈形成了对比。

链表实现的更快,明天用链表实现队列。

阅读全文

与python中链表相关的资料

热点内容
服务器端渲染的数据怎么爬 浏览:159
压缩空气喷射器 浏览:488
python提高效率 浏览:796
华为文件管理怎么样输入解压码 浏览:800
深思加密狗初始化 浏览:566
黄金崩溃pdf 浏览:309
华为特定短信息加密 浏览:375
微机原理与单片机技术李精华答案 浏览:816
pic12c508单片机 浏览:309
androidgps调用 浏览:226
金文编pdf 浏览:445
14乘87减147的简便算法 浏览:473
怎么创建edu文件夹 浏览:721
算法的基础问题 浏览:256
苹果手机怎么选择app支付 浏览:856
访问加密服务器失败怎么回事 浏览:439
程序员每天跑步5公里 浏览:789
党员对程序员有帮助么 浏览:550
慢跑穿压缩衣还是紧身衣 浏览:214
什么服务器引擎最好 浏览:497