python代码——栈和队列
python代码——栈和队列
顺序栈:
class SqStack(): def __init__(self,length): self.top = -1 self.stlist=[] #判断是否为空 def is_empty(self): return self.top == -1 #返回栈顶元素 def get_element(self): if self.is_empty(): raise IndexError("空栈,无法获取栈顶") else: return self.stlist[self.top] #返回栈的长度 def get_length(self): return self.top+1 #进栈 def append(self,ele): self.top += 1 self.stlist.append(ele) #出栈 def remove(self): if self.is_empty(): return None else: self.stlist.pop() self.top -= 1 #清空栈 def clear(self): self.stlist = [] self.top = -1 #查看所有元素 def ShowList(self): return self.stlist #查看位置指定元素 def LocateElem(self,i): if i > self.top: return '超过指定位置' else: return self.stlist[i]
链栈:
class SingleStack(): # 结点类初始化 def __init__(self,item): self.item = item self.next = None # 定义单链表 class SingleLinkStack(): # 链表栈初始化 def __init__(self): self.head = None self.top = 0 #累计栈链表长度 # 判断链表是否为空 def is_empty(self): return self.top == 0 # 输出链表长度 def get_length(self): return self.top # 返回栈顶元素 def stacktop(self): if self.is_empty(): return '栈为空' else: return self.head.item # 进栈 def add(self,newItem): elem = SingleStack(newItem) cur = self.head if self.top == 0: self.head = elem else: elem.next = self.head self.head = elem self.top += 1 # 出栈 def remove(self): if self.is_empty(): return '栈为空' else: self.head = self.head.next self.top -= 1 # 清空链表 def clear(self): self.head = None self.top = 0
队列顺序表示:
class QueueList(): #初始化队列 def __init__(self): self.top = -1 #指向队头 self.rear = -1 # 指向队尾 self.stlist = [] #储存队列数据 #判断队列是否为空 def is_empty(self): return self.top == -1 #返回队头元素 def queuetop(self): if self.top == -1: return '队列为空' return self.stlist[self.top] #返回队列的长度 def get_length(self): return self.rear + 1 #入队 def append(self,elem): self.stlist.append(elem) self.rear += 1 #出队列 def remove(self): if self.is_empty(): return '队列为空' else: self.stlist.pop(self.top) self.rear -= 1 #清空队列 def clear(self): self.stlist = [] self.top = -1 self.rear = -1 #查看所有元素 def ShowList(self): return self.stlist
队列链式表示:
class SingleQueue(): # 结点类初始化 def __init__(self,item): self.item = item self.next = None # 定义单链队列 class SingleLinkQueue(): # 链式队列初始化 def __init__(self): self.head = None #头指针 self.rear = None #尾指针 self.top = 0 #队列长度 # 判断队列是否为空 def is_empty(self): return self.top == 0 # 输出队列长度 def get_length(self): return self.top # 返回队列顶元素 def queuetop(self): if self.is_empty(): return '队列为空' else: return self.head.item # 进队列 def add(self,newItem): elem = SingleQueue(newItem) if self.top == 0: self.head = elem self.rear = elem else: self.rear.next = elem self.rear = elem self.top += 1 # 出队列 def remove(self): if self.is_empty(): return '队列为空' elif self.get_length() == 1: self.head = None self.rear = None self.top = 0 else: self.head = self.head.next self.top -= 1 #遍历队列 def travel(self): queuelist = [] if self.top == 0: return '队列为空' cur = self.head while cur != None: queuelist.append(cur.item) cur = cur.next return queuelist # 清空链表 def clear(self): self.head = None self.rear = None self.top = 0
双端队列的顺序表示:
class DoubleQueue(): # 结点类初始化 def __init__(self,item): self.item = item self.next = None # 定义双端队列 class DoubleLinkQueue(): # 链式队列初始化 def __init__(self): self.head = None #头指针 self.rear = None #尾指针 self.top = 0 #队列长度 # 判断队列是否为空 def is_empty(self): return self.top == 0 # 输出队列长度 def get_length(self): return self.top # 返回队头元素 def queuetop(self): if self.is_empty(): return '队列为空' else: return self.head.item #返回队尾元素 def queuerear(self): if self.is_empty(): return '队列为空' else: return self.rear.item #头进 def add_first(self,newItem): elem = DoubleQueue(newItem) if self.top == 0: self.head = elem self.rear = elem else: elem.next = self.head self.head = elem self.top += 1 # 尾进 def add_last(self,newItem): elem = DoubleQueue(newItem) if self.top == 0: self.head = elem self.rear = elem else: self.rear.next = elem self.rear = elem self.top += 1 # 头出 def remove_first(self): if self.top == 0: return '队列为空' elif self.top == 1: self.head = None self.rear = None self.top = 0 else: self.head = self.head.next self.top -= 1 #尾出 def remove_last(self): if self.top == 0: return '队列为空' elif self.top == 1: self.head = None self.rear = None self.top = 0 else: cur = self.head while cur.next != self.rear: cur = cur.next self.rear = cur self.rear.next = None self.top -= 1 #遍历队列 def travel(self): queuelist = [] if self.top == 0: return '空' cur = self.head while cur != None: queuelist.append(cur.item) cur = cur.next return queuelist # 清空链表 def clear(self): self.head = None self.rear = None self.top = 0

浙公网安备 33010602011771号