栈、队列和链表

栈

class Stack:
def __init__(self,sz=65536):
self.stack = []
self.top = -1
self.size = sz

def isEmpty(self):
return True if self.top is -1 else False

def isFull(self):
return True if self.top is self.size - 1 else False

def push(self,obj): #压入栈操作
if self.isFull():
raise Exception("Stack over flow!")
else:
self.stack.append(obj)
self.top += 1

def pop(self): #弹出栈顶元素
if self.isEmpty():
raise Exception("Stack is empty!")
else:
self.top -= 1
return self.stack.pop()

def count(self): #获取栈中元素个数
return self.top + 1

def top(self): #获取栈顶元素值
if self.isEmpty():
raise Exception("Stack is empty!")
return self.stack[top]

def show(self):
print(self.stack)

队列

class Queue:
def __init__(self,sz=65535):
self.queue = []
self.size = sz
self.len = 0

def isEmpty(self):
return True if self.len is 0 else False

def isFull(self):
return True if self.len is self.size else False

def length(self):
return self.len

def enqueue(self,obj): #入队
if self.isFull():
raise Exception("Queue is Full!")
else:
self.queue.append(obj)
self.len += 1

def dequeue(self): #出队
if self.isEmpty():
raise Exception("Queue is Empty!")
else:
self.len -= 1
return self.queue.pop(0)

def show(self):
print(self.queue)

class Deque:
def __init__(self,sz=65535):
self.queue = []
self.size = sz
self.len = 0

def isEmpty(self):
return True if self.len is 0 else False

def isFull(self):
return True if self.len is self.size else False

def length(self):
return self.len

def enqueue(self,obj): #从右边入队
if self.isFull():
raise Exception("DeQueue is Full!")
else:
self.len += 1
self.queue.append(obj)

def enqueueLeft(self,obj): #从左边入队
if self.isFull():
raise Exception("DeQueue is Full!")
else:
self.len += 1
self.queue.insert(0,obj)

def dequeue(self): #从左边出队
if self.isEmpty():
raise Exception("DeQueue is Empty!")
else:
self.len -= 1
return self.queue.pop(0)

def dequeueRight(self): #从右边出队
if self.isEmpty():
raise Exception("DeQueue is Empty!")
else:
self.len -= 1
return self.queue.pop()

def show(self):
print(self.queue)

链表

#构成双向链表的结点
class Node:
def __init__(self,key=None):
self.key = key
self.prev = None #指向前驱
self.next = None #指向后继

def getKey(self):
return self.key

def getPrev(self):
return self.prev

def getNext(self):
return self.next

def setKey(self, key):
self.key = key

def setPrev(self, prev):
self.prev = prev

def setNext(self, next):
self.next = next

def __init__(self,data=None):
self.len = 0
if data:
p = self.head = Node(data[0])
self.len += 1
for key in data[1:]:
node = Node(key)
p.setNext(node)
node.setPrev(p)
self.len += 1
p = node
#重载[]运算符，使其具体下标访问能力，比如像obj[1]这样访问
def __getitem__(self, index):
if index >= self.len or index < 0:
raise Exception("Index out of range!")
else:
for i in range(index):
p = p.getNext()
return p.getKey()

def length(self):
return self.len

def search(self,key):
while p and p.getKey() is not key:
p = p.getNext()
return p

def insert(self,key):
p = Node(key)
self.len += 1
else:
self.len += 1

def delete(self,key):
p = self.search(key)
if p:
if p.getPrev():
p.getPrev().setNext(p.getNext())
else:
if p.getNext():
p.getNext().setPrev(p.getPrev())
p.setPrev(None)
p.setNext(None)
self.len -= 1

def show(self):
while p:
print(p.getKey(),end=' ')
p = p.getNext()
print()

• 本文已收录于以下专栏：

数据结构（栈，队列，链表，二叉树）

• u013766436
• 2016年05月04日 17:03
• 1917

链表，队列，堆栈的区别

• jixinhuluwa
• 2016年01月06日 17:18
• 1355

【数据结构】数组、链表、栈、队列、二叉树

• m0_37854317
• 2017年04月23日 10:50
• 819

常见的线性列表结构---【数组、链表、栈、队列、堆】

• Toplifeww
• 2015年01月22日 10:44
• 1168

【万字总结】图解堆算法、链表、栈与队列（多图预警）

• NoMasp
• 2015年12月18日 08:40
• 18758

数组、链表、堆栈和队列、线性表和顺序表

• qingkongyeyue
• 2016年12月26日 13:51
• 1045

数组、链表、堆栈、队列和树

• wei78008023
• 2016年02月25日 10:04
• 2927

c++基本数据结构的类的用法--栈，队列，链表

1.stack类 转自：http://www.169it.com/article/2839007600903800247.html c++ stl栈stack介绍 C++ Stack（堆栈） 是一...
• xtnc1028
• 2015年05月28日 16:41
• 970

java 链表、栈、队列、树的实现

• sinat_34322082
• 2016年12月16日 15:59
• 665

线性表、链表、栈、队列的关系

• qq_26849233
• 2017年05月16日 09:14
• 549

举报原因： 您举报文章：栈、队列和链表 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)