棧的實(shí)現(xiàn)
——直接用順序表(列表list)進(jìn)行
棧結(jié)構(gòu)實(shí)現(xiàn)
??梢杂庙樞虮韺?shí)現(xiàn),也可以用鏈表實(shí)現(xiàn)。
棧的操作
Stack() 創(chuàng)建一個(gè)新的空棧
push(item) 添加一個(gè)新的元素item到棧頂
pop() 彈出棧頂元素
peek() 返回棧頂元素——不出棧
is_empty() 判斷棧是否為空
size() 返回棧的元素個(gè)數(shù)
添加元素,稱為“壓?!保ā叭霔!保?,英文中成為push
彈出元素,在棧頂pop出元素
-
邏輯值真假總結(jié):
假:空字符串,0,空列表,空元組
| 數(shù)據(jù)類型 | False | True |
|---|---|---|
| 整型 | 0 | 其他 |
| 浮點(diǎn)型 | 0.0 | 其他 |
| 字符串 | ‘’ | 其他 |
| 字典 | {} | 其他 |
| 元組 | () | 其他 |
| 列表 | [] | 其他 |
| None | None | 空格 |
不同邏輯運(yùn)算符的優(yōu)先級(jí):
not > and > or
代碼實(shí)現(xiàn):
# coding:utf-8
class Stack(object):
"""棧"""
"""Stack() 創(chuàng)建一個(gè)新的空棧
push(item) 添加一個(gè)新的元素item到棧頂
pop() 彈出棧頂元素
peek() 返回棧頂元素
is_empty() 判斷棧是否為空
size() 返回棧的元素個(gè)數(shù)"""
def __init__(self):
# 不希望把容器直接給使用者,否則別人可以繞過以下功能直接操作
self.__list = [] # 一開始沒有元素,空列表
def push(self, item):
"""添加新的元素"""
# 根據(jù)容器不同,選擇頭尾
self.__list.append(item)
# self.__list.insert(0, item) # 用順序表的話,尾部為O(1)
def pop(self):
"""彈出棧元素"""
return self.__list.pop()
def peek(self):
"""返回棧頂元素"""
# 空列表不支持-1操作,所以要有判斷
if self.__list:
return self.__list()
else:
return None
def is_empty(self):
"""判斷是否為空"""
# 遇到return的時(shí)候,先計(jì)算右邊的值,如果是邏輯值就返回
# 判斷空,如果是空的,就返回真,否則返回假
return self.__list == []
# return not self.__list 等同的效果
def size(self):
"""返回棧元素的個(gè)數(shù)"""
return len(self.__list)
if __name__ == "__main__":
s = Stack()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
實(shí)現(xiàn)結(jié)果:

結(jié)果