栈和队列基本原理
栈和队列基本原理
1.栈 1.1 栈基本原理 1.2. 栈操作步骤 1.2.1 插入数据流程【压栈】 1.2.2 移除数据流程【出栈】
1.3. 栈代码实现
2.队列 2.1 队列基本原理 2.2 队列操作步骤
2.3. 队列代码实现
3.栈与队列对比
1.栈
1.1 栈基本原理
栈顶【末尾】,栈底【开头】 栈的三条约束
只能从末尾插入数据【压栈】 只能从末尾移除数据【出栈】 只能从末尾读取数据 特性:后进先出(LIFO last in,first out)【最后入栈的元素,最先出栈】
1.2. 栈操作步骤
1.2.1 插入数据流程【压栈】
1.2.2 移除数据流程【出栈】
1.3. 栈代码实现
栈实现
class Stack ( ) :
def __init__ ( self) :
self. items = [ ]
def push ( self, item) :
self. items. append( item)
def pop ( self) :
return self. items. pop( )
def peek ( self) :
return len ( self. items) - 1
def isEmpty ( self) :
return self. items == ''
def size ( self) :
return len ( self. items)
s = Stack( )
s. push( 5 )
print ( "压栈第1个元素后,栈的数据:" , s. items)
s. push( 3 )
print ( "压栈第2个元素后,栈的数据:" , s. items)
s. push( 0 )
print ( "压栈第3个元素后,栈的数据:" , s. items)
print ( '*' * 50 )
print ( "出栈第1个元素后,栈的数据:" , s. items, ";出现的数值为:" , s. pop( ) )
print ( "出栈第2个元素后,栈的数据:" , s. items, ";出现的数值为:" , s. pop( ) )
print ( "出栈第3个元素后,栈的数据:" , s. items, ";出现的数值为:" , s. pop( ) )
通过队列实现栈class Queue ( ) :
def __init__ ( self) :
self. items = [ ]
def enqueue ( self, item) :
self. items. append( item)
def dequeue ( self) :
return self. items. pop( 0 )
def isEmpty ( self) :
return self. items == ''
def size ( self) :
return len ( self. items)
items = [ 1 , 2 , 3 , 4 , 5 ]
q1 = Queue( )
q2 = Queue( )
for item in items:
q1. enqueue( item)
print ( "压栈" , q1. items)
while True :
while q1. size( ) > 1 :
item = q1. dequeue( )
q2. enqueue( item)
print ( "出栈" , q1. dequeue( ) )
q1, q2 = q2, q1
if q1. size( ) == 0 :
break
2.队列
2.1 队列基本原理
栈顶【末尾】,栈底【开头】 栈的三条约束
只能从末尾插入数据【压栈】 只能从开头移除数据【出栈】 只能从开头读取数据 特性:先进先出(FIFO first in,first out)【最先入栈的元素,最先出栈】
2.2 队列操作步骤
2.2.1 插入数据
2.2.2 移除数据
2.3. 队列代码实现
队列
class Queue ( ) :
def __init__ ( self) :
self. items= [ ]
def enqueue ( self, item) :
self. items. append( item)
def dequeue ( self) :
return self. items. pop( 0 )
def isEmpty ( self) :
return self. items== ''
def size ( self) :
return len ( self. items)
q= Queue( )
q. enqueue( 5 )
print ( "压栈第1个元素后,队列的数据:" , q. items)
q. enqueue( 3 )
print ( "压栈第2个元素后,队列的数据:" , q. items)
q. enqueue( 0 )
print ( "压栈第3个元素后,队列的数据:" , q. items)
print ( '*' * 50 )
print ( "出栈第1个元素后,队列的数据:" , q. items, ";出现的数值为:" , q. dequeue( ) )
print ( "出栈第2个元素后,队列的数据:" , q. items, ";出现的数值为:" , q. dequeue( ) )
print ( "出栈第3个元素后,队列的数据:" , q. items, ";出现的数值为:" , q. dequeue( ) )
通过栈实现队列class Stack ( ) :
def __init__ ( self) :
self. items = [ ]
def push ( self, item) :
self. items. append( item)
def pop ( self) :
return self. items. pop( )
def peek ( self) :
return len ( self. items) - 1
def isEmpty ( self) :
return self. items == ''
def size ( self) :
return len ( self. items)
s1= Stack( )
s2= Stack( )
items= [ 1 , 2 , 3 , 4 , 5 ]
for item in items:
s1. push( item)
print ( "压栈" , s1. items)
while s1. size( ) > 0 :
item= s1. pop( )
s2. push( item)
print ( "出栈" , s1. items)
3.栈与队列对比
栈与队列相同
栈与队列不同
读取数据【栈从末尾,队列从开头】 移除数据【栈从末尾,队列从开头】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334719.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!