1.栈-先进后出LIFO
出栈 poping,入栈pushing
栈的5个方法:is_empty,push(向栈的顶部添加一个元素),pop(从顶部移除一个元素),peek(返回顶部的元素,但不会移除),size(返回一个表示栈中元素数量的整型数)
2.代码举例如下:
class Stack:
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):
last=len(self.items)-1
return self.items[last]
def size(self):
return len(self.items)
stack=Stack() #新创建的栈是空的,,is_empty方法将返回True
print(stack.is_empty())
#向栈中添加新元素,is_empty返回的则是False
stack1=Stack()
stack1.push(1)
print(stack1.is_empty())
#调用pop方法从栈中移除一个元素,is_empty方法 的返回值为True
stack3=Stack()
stack3.push(1)
item=stack3.pop()
print(item)
print(stack3.is_empty())
#查看栈的内容并打印其大小
stack4=Stack()
for i in range(0,6):
stack4.push(i)
print(stack4.peek())
print(stack4.size())
3.运行结果如下:
4.使用栈逆转字符串:
首先将“Hello"中的每个字符串放入栈中,然后遍历创建的栈,取出栈中的元素并放入遍历reverse,遍历完成后,原来的单词就逆序完成了。
class Stack:
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):
last=len(self.items)-1
return self.items[last]
def size(self):
return len(self.items)
stack=Stack()
for c in "Hello":
stack.push(c)
reverse = " "
for i in range(len(stack.items)):
reverse+=stack.pop()
print(reverse)
运行结果就是把Hello变成了 olleH
5.队列-先进先出 FIFO
编写拥有4个方法的队列:enquee(向队列中添加一个新元素),dequeue(从队列中移除一个元素),is_empty,size(返回队列中元素的数量)
class Queue:
def __init__(self):
self.items=[]
def is_empty(self):
return self.items==[]
def enqueue(self,item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
a_queue=Queue()
print(a_queue.is_empty())
b_queue=Queue()
for i in range(5):
b_queue.enqueue(i)
print(b_queue.size())
#依次移除队列中的元素
c_queue=Queue()
for i in range(5):
c_queue.enqueue(i)
for i in range(5):
print(c_queue.dequeue())
print()
print(c_queue.size())
运行结果
6. 练习
7 答案
1.
class Stack:
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)
stack = Stack()
for c in "yesterday":
stack.push(c)
reversed_string = ""
for i in range(len(stack.items)):
reversed_string += stack.pop()
print(reversed_string)
2.
class Stack:
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)
list1 = [1, 2, 3, 4, 5]
list2 = []
stack = Stack()
for item in list1:
stack.push(item)
for i in range(len(stack.items)):
list2.append(stack.pop())
print(list2)