python代码——栈和队列的应用
python代码——栈和队列的应用
1.栈的应用
# 定义结点类,包含两个成员:结点元素值和指向下一结点的指针 class SingleNode(): # 结点类初始化 def __init__(self, item): self.item = item # item存放结点的数值 self.next = None # 下一指针指向 # 定义链栈 class LinkStack(): #初始化 def __init__(self): self.top=None #判断是否为空 def is_empty(self): if self.top==None: return True else: return False #返回栈顶元素 def get_element(self): if self.is_empty(): return None else: return self.top.item #返回栈长度 def get_length(self): tmp=self.top if tmp==None: return 0 i=0 while tmp != None: tmp=tmp.next i+=1 return i # 进栈 def add_stack(self, element): node = SingleNode(element) node.next = self.top # 指针变换 self.top = node # 出栈 def remove_stack(self): if self.is_empty(): raise IndexError("栈已空,无法出栈") else: node=self.top self.top=self.top.next return node.item #清空栈 def clear_stack(self): self.top=None
括号匹配:
def match_brac(s): in_stack_dic={'{':1,'[':2,'(':3} out_stack_dic={'}':1,']':2,')':3} test=LinkStack() s=str(s) for i in s: if i in in_stack_dic: test.add_stack(in_stack_dic[i]) elif i in out_stack_dic: try: out=test.remove_stack() except IndexError: print('匹配失败') return if out!=out_stack_dic[i]: print('匹配失败') return print('匹配成功') return
十进制转二进制:
def dec2bin(i): i=int(i) test=LinkStack() r=[] while i >0: test.add_stack(i%2) i=i//2 tmp=test.top while tmp!=None: tmp=tmp.next r.append(str(test.remove_stack())) return ''.join(r)
十进制转N进制:
def dec_conv(i,n): i=int(i) n=int(n) test=LinkStack() r=[] while i >0: test.add_stack(i%n) i=i//n tmp=test.top while tmp!=None: tmp=tmp.next r.append(str(test.remove_stack())) return ''.join(r)
2.队列的应用
回文检验
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
def pali_det(s): s=str(s) test=DLinkQueue() for i in s: test.add_queue_top(i) while test.get_length()>1: if test.remove_queue_top()!=test.remove_queue_rear(): print('不是回文词') return print('是回文词') return

浙公网安备 33010602011771号