每天学一点之Python100例(21~22)


问题21:栈的简单实现
分析:什么是栈?栈是一种容器,可存入数据元素、访问元素、删除元素等。栈的基本操作是一个封闭的集合。现在给出一个栈抽象数据类型的描述,其中定义的操作包括:栈的创建(创建一个空栈)、判断栈是否为空、将元素压入栈中(进栈或入栈)、从栈中弹出元素并将其返回(退栈或出栈)、检查栈元素(访问最后入栈元素)。使用的是后进先出(LIFO)结构。
伪代码如下:
STACK:
stack(self) #创建空栈
is_empty(self) #判断栈是否为空,空时返回True否则返回False
push(self) #将元素elem加入栈
pop(self) #删除栈里最后压入的元素并将其返回
top(self) #取得栈里最后压入的元素,不删除

demoCode:
#! /usr/bin/python3

class newStack():
def __init__(self):
self._elems = []

def is_empty(self):
return self._elems == []

def top(self):
if self._elems == []:
raise StackUnderflow("in Stack.top()")
return self._elems[-1]

def push(self, elem):
self._elems.append(elem)

def pop(self):
if self._elems == []:
raise StackUndeflow("in Stack.pop()")
return self._elems.pop()

if __name__ == '__main__':
stack = newStack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.top())
stack.push(4)
stack.push(5)
print(stack.top())
while not stack.is_empty():
print(stack.pop())

问题22:队列的简单实现
分析:什么是队列?队列也是一种容器,可以存入元素、访问元素、删除元素。使用的是先进先出(FIFO)结构。队列的基本操作也是一个封闭集合,通常包括:创建新队列对象(如创建空队列);判断队列是否为空(还可能需要判断是否为满);将一个元素放入队列(入队);从队列中删除一个元素并返回它(出队);查看队列里当前元素等;
伪代码:
Queue:
Queue(self) #创建空队列
is_empty(self) #判断队列是否为空,空时返回True否则返回False
enqueue(self, elem) #将元素elem加入队列
dequeue(self) #删除队列里最早进入的元素并将其返回
peek(self) #查看队列里最早进入的元素,不删除

demoCode:
#! /usr/bin/python3

class newQueue():
def __init__(self, init_len=8):
self._len = init_len
self._elems = [0] * init_len
self._head = 0
self._num = 0

def is_empty(self):
return self._num == 0

def peek(self):
if self._num == 0:
raise QueueUnderflow
return self._elems[self._head]

def dequeue(self):
if self._num == 0:
raise QueueUnderflow
e = self._elems[self._head]
self._head = (self._head+1) % self._len
self._num -= 1
return e

def enqueue(self, e):
if self._num == self._len:
self.__extend()
self._elems[(self._head+self._num) % self._len] = e
self._num += 1

def __extend(self):
old_len = self._len
self._len *= 2
new_elems = [0]*self._len
for i in range(old_len):
new_elems[i] = self._elems[(self._head+i)%old_len]
self._elems, self._head = new_elems, 0

if __name__ == '__main__':
nQueue = newQueue()
for i in range(0,5):
nQueue.enqueue(i)
print(nQueue.peek())
print(nQueue.dequeue())
print(nQueue.peek())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值