在堆栈这种数据结构中,数据的存取会服“先进后出”原则。
生活中最常见的例子就是打开抽屉,假如有一排抽屉我们需要一一打开检查,我们会从下往上打开抽屉,再从上往下关闭——“先进后出”,先打开的抽屉最后再关闭。
再比如和人下棋,发现自己下错了,需要悔棋,执行的也是堆栈操作。
堆栈有两种常见的实现方式:列表和链表。
top指定堆栈最上层元素。
每当压入数据时,top+=1
每当弹出数据时,top-=1
top=-1
STACK=[None]*10
def push(STACK,top,value)
if top==9:
print('堆栈已满')
else:
top+=1
SATCK[top]=value
return SATCK,top
def pop(STACK,top):
if top==-1:
print('堆栈已空')
else:
p=SATCK[top]
top-=1
return SATCK,top,p
top指向堆栈顶端,压入数据时新数据指向top,top指向新数据。
弹出数据时,top=top.next
class Node:
def __init__(self):
self.value=0
self.next=None
head=Node()
top=head
def push(top,value):
newnode=Node()
newnode.value=value
newnode.next=top
top=newnode
return top
def pop(top):
p=None
if top==None:
print('堆栈已空')
else:
p=top.value
top=top.next
return top,p
更多详细说明和代码请点击这里
队列和堆栈不同,它具有先进先出的特点。
就好像我们排队买东西一样,先排队的人先付钱。
队列同样有两种实现方式:列表和链表。
需要用front和rear分别指定队列的头和尾。
压入数据时,rear+1
弹出数据时,front+1
front=-1
rear=-1
queue=[None]*10
def push(queue,rear,value):
if rear==9:
print('队列已满')
else:
rear+=1
queue[rear]=value
return queue,rear
def pop(queue,front,rear):
p=None
if front==rear:
print('队列已空')
else:
p=queue[front]
front+=1
return queue,front,p
加入数据时,先判断front是否存在,若不存在,则需要新建一条队列,若存在,则将rear.next指向新数据,再将rear指向新数据。
弹出数据时,先判断front是否存在,若存在,则将front指向front.next
class Node:
def __init__(self):
self.value = 0
self.next=None
rear=None
front=None
def push(value,front,rear):
newnode=Node()
newnode.value=value
if front==None:
print('这是一个空队列')
rear=newnode
front=newnode
else:
rear.next=newnode
rear=newnode
return front,rear
def pop(front):
if front=None:
print('这是一个空队列')
else:
p=front.value
front=front.next
return p,front
更多详细说明和代码请点击这里