python中出栈的方法,python中栈的原理及实现方法示例
python中棧的原理及實現(xiàn)方法示例
本文實例講述了python中棧的原理及實現(xiàn)方法。分享給大家供大家參考,具體如下:
棧(stack),有些地方稱為堆棧,是一種容器,可存入數(shù)據(jù)元素、訪問元素、刪除元素,它的特點在于只能允許在容器的一端(稱為棧頂端指標(biāo),英語:top)進(jìn)行加入數(shù)據(jù)(英語:push)和輸出數(shù)據(jù)(英語:pop)的運算。沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最后存入的那個元素,確定了一種默認(rèn)的訪問順序。
由于棧數(shù)據(jù)結(jié)構(gòu)只允許在一端進(jìn)行操作,因而按照后進(jìn)先出(LIFO, Last In First Out)的原理運作。
棧結(jié)構(gòu)實現(xiàn)
棧可以用順序表實現(xiàn),也可以用鏈表實現(xiàn)。
棧的操作
Stack() 創(chuàng)建一個新的空棧
push(item) 添加一個新的元素item到棧頂
pop() 彈出棧頂元素
peek() 返回棧頂元素
is_empty() 判斷棧是否為空
size() 返回棧的元素個數(shù)
示例:
class Stack(object):
"""棧"""
def __init__(self):
self.items = []
def is_empty(self):
"""判斷是否為空"""
return self.items == []
def push(self, item):
"""加入元素"""
self.items.append(item)
def pop(self):
"""彈出元素"""
return self.items.pop()
def peek(self):
"""返回棧頂元素"""
return self.items[len(self.items)-1]
def size(self):
"""返回棧的大小"""
return len(self.items)
if __name__ == "__main__":
stack = Stack()
stack.push("hello")
stack.push("world")
stack.push("itcast")
print stack.size()
print stack.peek()
print stack.pop()
print stack.pop()
print stack.pop()
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
時間: 2019-11-24
前言 Python本身已有順序表(List.Tupple)的實現(xiàn),所以這里從棧開始. 什么是棧 想象一摞被堆起來的書,這就是棧.這堆書的特點是,最后被堆進(jìn)去的書,永遠(yuǎn)在最上面.從這堆書里面取一本書出來,取哪本書最方便?肯定是最上面那本.棧這種數(shù)據(jù)結(jié)構(gòu)的特點就是如此:后進(jìn)先出(Last In First Out - LIFO),即最后被堆進(jìn)去的數(shù)據(jù),最先被拿出來. 棧的Python實現(xiàn) 棧可以用順序表方式實現(xiàn),也可以用鏈表方式實現(xiàn).我大Python的內(nèi)建數(shù)據(jù)結(jié)構(gòu)太強(qiáng)大,可以用list直接實現(xiàn)棧,簡
先來回顧一下棧和隊列的基本概念: 相同點:從"數(shù)據(jù)結(jié)構(gòu)"的角度看,它們都是線性結(jié)構(gòu),即數(shù)據(jù)元素之間的關(guān)系相同. 不同點:棧(Stack)是限定只能在表的一端進(jìn)行插入和刪除操作的線性表. 隊列(Queue)是限定只能在表的一端進(jìn)行插入和在另一端進(jìn)行刪除操作的線性表.它們是完全不同的數(shù)據(jù)類型.除了它們各自的基本操作集不同外,主要區(qū)別是對插入和刪除操作的"限定". 棧必須按"后進(jìn)先出"的規(guī)則進(jìn)行操作:比如說,小學(xué)老師批改學(xué)生的作業(yè),如果不打亂作業(yè)本的順
本文以實例形式展示了Python算法中棧(stack)的實現(xiàn),對于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)域算法有一定的參考借鑒價值.具體內(nèi)容如下: 1.棧stack通常的操作: Stack() 建立一個空的棧對象 push() 把一個元素添加到棧的最頂層 pop() 刪除棧最頂層的元素,并返回這個元素 peek()? 返回最頂層的元素,并不刪除它 isEmpty()? 判斷棧是否為空 size()? 返回棧中元素的個數(shù) 2.簡單案例以及操作結(jié)果: Stack Operation Stack Contents Return
一.遞歸 遞歸調(diào)用:一個函數(shù),調(diào)用的自身,稱為遞歸調(diào)用 遞歸函數(shù):一個可以調(diào)用自身的函數(shù)稱為遞歸函數(shù) 凡是循環(huán)能干的事,遞歸都能干 方法: 1.寫出臨界條件 2.找這一次和上一次的關(guān)系 3.假設(shè)當(dāng)前函數(shù)已經(jīng)能用,調(diào)用自身計算上一次的結(jié)果再求出本次的結(jié)果 下面我們通過兩段代碼簡單看一下遞歸和非遞歸的區(qū)別: 輸入一個大于等于1的數(shù),求1到n的和! # 普通函數(shù)方法 def hanshu(n): sum = 0 # 循環(huán)遍歷每一個數(shù)字,將他們加到一個事先定義好的變量上,直到加完 for x in ra
Python 堆棧 堆棧是一個后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu). 堆棧這個數(shù)據(jù)結(jié)構(gòu)可以用于處理大部分具有后進(jìn)先出的特性的程序流 . 在堆棧中, push 和 pop 是常用術(shù)語: push: 意思是把一個對象入棧. pop: 意思是把一個對象出棧. 下面是一個由 Python 實現(xiàn)的簡單的堆棧結(jié)構(gòu): stack = [] # 初始化一個列表數(shù)據(jù)類型對象, 作為一個棧 def pushit(): # 定義一個入棧方法 stack.append(raw_input('Enter New String:
1. 棧 棧(stack)又名堆棧,它是一種運算受限的線性表.其限制是僅允許在表的一端進(jìn)行插入和刪除運算.這一端被稱為棧頂,相對地,把另一端稱為棧底.向一個棧插入新元素又稱作進(jìn)棧.入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素:從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素. 棧(Stack)是限制插入和刪除操作只能在一個位置進(jìn)行的表,該位置是表的末端,稱為棧的頂(top).棧的基本操作有PUSH(入棧)和POP(出棧).棧又被稱為LIF
棧(stack) 棧又稱之為堆棧是一個特殊的有序表,其插入和刪除操作都在棧頂進(jìn)行操作,并且按照先進(jìn)后出,后進(jìn)先出的規(guī)則進(jìn)行運作. 如下圖所示 例如槍的彈匣,第一顆放進(jìn)彈匣的子彈反而在發(fā)射出去的時候是最后一個,而最后放入彈匣的一顆子彈在打出去的時候是第一顆發(fā)射出去的. 棧的接口 如果你創(chuàng)建了一個棧,那么那么應(yīng)該具有以下接口來進(jìn)行對棧的操作 接口 描述 push() 入棧 pop() 出棧 isEmpty() 判斷是否為空棧 length() 獲取棧的長度 getTop() 取棧頂?shù)脑?元素不出棧
本文實例講述了Python編程實現(xiàn)雙鏈表,棧,隊列及二叉樹的方法.分享給大家供大家參考,具體如下: 1.雙鏈表 class Node(object): def __init__(self, value=None): self._prev = None self.data = value self._next = None def __str__(self): return "Node(%s)"%self.data class DoubleLinkedList(object): def
本文實例講述了Python基于列表模擬堆棧和隊列功能.分享給大家供大家參考,具體如下: 之前的文章http://www.jb51.net/article/59897.htm介紹了堆棧與隊列的Python實現(xiàn)方法,這里使用列表來模擬一下堆棧與隊列的簡單操作. 一.隊列特點:先進(jìn)先出.后進(jìn)后出 用列表insert.pop模擬進(jìn)隊出隊: >>> l = [] >>> l.insert(0,'p1') >>> l.insert(0,'p2') >>
本文實例講述了Python實現(xiàn)基本數(shù)據(jù)結(jié)構(gòu)中棧的操作.分享給大家供大家參考,具體如下: #! /usr/bin/env python #coding=utf-8 #Python實現(xiàn)基本數(shù)據(jù)結(jié)構(gòu)---棧操作 class Stack(object): def __init__(self,size): self.size = size self.stack = [] self.top = 0#初始化,top=0時則為空棧 def push(self,x): if self.stackFull():#進(jìn)
本文實例講述了python實現(xiàn)堆棧與隊列的方法.分享給大家供大家參考.具體分析如下: 1.python實現(xiàn)堆棧,可先將Stack類寫入文件stack.py,在其它程序文件中使用from stack import Stack,然后就可以使用堆棧了. stack.py的程序: 復(fù)制代碼 代碼如下: class Stack():? ??? def __init__(self,size):? ??????? self.size=size;? ??????? self.stack=[];
問題 怎樣實現(xiàn)一個按優(yōu)先級排序的隊列? 并且在這個隊列上面每次 pop 操作總是返回優(yōu)先級最高的那個元素 解決方案 下面的類利用 heapq 模塊實現(xiàn)了一個簡單的優(yōu)先級隊列: import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index = 0 def push(self, item, priority): heapq.heappush(self._queue, (-priority, sel
本文實例講述了Python基于list的append和pop方法實現(xiàn)堆棧與隊列功能.分享給大家供大家參考,具體如下: #coding=utf8 ''''' 堆棧: 堆棧是一個后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu). 在棧上"push"元素是個常用術(shù)語,意思是把一個對象添加到堆棧中. 刪除一個元素,可以把它"pop"出堆棧. 隊列: 隊列是一種先進(jìn)先出(FIFO)的數(shù)據(jù)類型. 新的元素通過"入隊"的方式添加進(jìn)隊列的末尾, "出對"就是從
隊.棧和鏈表一樣,在數(shù)據(jù)結(jié)構(gòu)中非常基礎(chǔ)一種數(shù)據(jù)結(jié)構(gòu),同樣他們也有各種各樣.五花八門的變形和實現(xiàn)方式.但不管他們形式上怎么變,隊和棧都有其不變的最基本的特征,我們今天就從最基本,最簡單的實現(xiàn)來看看隊列和堆棧. 不管什么形式的隊列,它總有的一個共同的特點就是"先進(jìn)先出".怎么理解呢?就像是超市排隊結(jié)賬,先排隊的人排在隊的前面,先結(jié)賬出隊.這是隊列的特征. 而堆棧則和隊列相反,它是"先進(jìn)后出",怎么理解呢?基本所有的編輯器都有一個撤銷功能,就是按Ctrl+Z.當(dāng)你寫了一段
本文實例講述了Python實現(xiàn)隊列的方法.分享給大家供大家參考.具體實現(xiàn)方法如下: #!/usr/bin/env python queue = [] def enQ(): queue.append(raw_input('Enter new string: ').strip()) #調(diào)用list的列表的pop()函數(shù).pop(0)為列表的第一個元素 def deQ(): if len(queue) == 0: print 'Cannot pop from an empty queue!' else
本文實例講述了Python實現(xiàn)優(yōu)先級隊列的方法.分享給大家供大家參考,具體如下: 問題:要實現(xiàn)一個隊列,它能夠以給定的優(yōu)先級對元素排序,且每次pop操作時都會返回優(yōu)先級最高的那個元素: 解決方案:采用heapq模塊實現(xiàn)一個簡單的優(yōu)先級隊列 # example.py # # Example of a priority queue import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index =
實現(xiàn)一個優(yōu)先級隊列,每次pop的元素要是優(yōu)先級高的元素,由于heapq.heapify(list)默認(rèn)構(gòu)建一個小頂堆,因此要將priority變?yōu)橄喾磾?shù)再push,代碼如下: import heapq class PriorityQueue(object): """實現(xiàn)一個優(yōu)先級隊列,每次pop優(yōu)先級最高的元素""" def __init__(self): self._queue = [] self._index = 0 def push(sel
本文實例講述了Python實現(xiàn)隊列的方法.分享給大家供大家參考,具體如下: Python實現(xiàn)隊列 隊列(FIFO),添加元素在隊列尾,刪除元素在隊列頭操作 列表實現(xiàn)隊列:利用python列表方法 代碼如下: # 列表實現(xiàn)隊列 class listQueue(object): def __init__(self): self.items = [] def is_empty(self): return self.items == None def size(self): return len(sel
程序出錯的時候,我們往往需要根據(jù)異常信息來找到具體出錯的代碼.簡單地用print打印異常信息并不能很好地追溯出錯的代碼: # -*- coding: utf-8 -*- def foo(a, b): c = a + b raise ValueError('test') return c def bar(a): print('a + 100:', foo(a, 100)) def main(): try: bar(100) except Exception as e: print(repr(e))
總結(jié)
以上是生活随笔為你收集整理的python中出栈的方法,python中栈的原理及实现方法示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac 查看 Tomcat 查看端口进
- 下一篇: websocket python爬虫_p