python浪漫代码表白npy_基于python实现链式队列代码

"""链式存储-队列

linkqueue.py

代码实现

思路:

1.入队,

2.出队,

3.判断空满"""

#异常类

classQueueError(Exception):pass

#节点生成类

classNode:"""思路:将自定义的类视为节点的生成类,

实例对象中包含数据的部分和下一个节点的next"""

def __init__(self,val,next =None):

self.val= val #有用数据

self.next = next #循环下一个节点的关系

#链式存储队列类-队头删除,队尾加入,判断空满等

classLinkQueue01:"""头尾选择一端做队头,另一端队尾,队头删除,队尾插入,总有一端需要遍历

改进思路:标记头部和尾部,不需要遍历"""

def __init__(self):#标记头部位置

self._first =Node(None)#队头删除

defdequeue(self):

p=self._firstif p.next isNone:raise QueueError("queue is empty")else:

p.next=p.next.next#队尾插入

defenqueue(self, val):

p=self._firstif p.next isNone:

p.next=Node(val)else:while p.next is notNone:

p=p.next

p.next=Node(val)#判断队列为空

defis_empty(self):if self._first.next isNone:returnTrueelse:returnFalse#遍历队列

defshow(self):#队列为空时,报异常

if self._first.next isNone:raise QueueError("queue is empty")else:

p= self._first.next #第一个有限节点

while p is notNone:print(p.val)

p= p.next #p 向后移动

#print("-"*30)#if __name__ == "__main__":#lq = LinkQueue()#print(lq.is_empty())##lq.delete_node()## lq.show()#lq.enqueue(1)#lq.show()#print("***")## lq.insert_end(2)##print(lq.is_empty())#lq.enqueue(2)#lq.enqueue(3)#lq.show()#print("***")#lq.enqueue(4)#lq.show()##print(lq.is_empty())##lq.dequeue()##lq.show()#-------------------------------------------------

"""链式队列的另一种实现

重点代码

思路分析:

1.基于链表构建队列模型

2.链表的开端作为队头,结尾位置作为队尾

3.单独定义队尾进行标记,每次插入数据不需要遍历

4.当队头和队尾重叠时,认为队列为空"""

classLinkQueue:def __init__(self):#定义队头队尾属性变量,牺牲节点,

self.front = self.rear =Node(None)#判断队列空

defis_empty(self):return self.front ==self.rear#入队操作,rear动

defenqueue(self,val):

self.rear.next=Node(val)

self.rear=self.rear.next#出队,front动,指向谁,谁出队

defdequeue(self):if self.front ==self.rear:raise QueueError("queue is empty")

self.front=self.front.nextreturn self.front.val #指向他,但实际出队

if __name__ == "__main__":print("-"*30)

lq=LinkQueue()

lq.enqueue(1)

lq.enqueue(2)

lq.enqueue(3)

lq.enqueue(4)print(lq.dequeue()) #1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值