队列:从一端插入数据,另一端删除数据元素,插入的一端叫前端(front)移除的叫后端(rear),也叫作先进先出FIFO(first in first out)
在Python中的简单使用:
值得注意的是在python中使用get()取出数据后会进行删除
import queue #导入queue包
str='我是天才'
FIFO=queue.Queue() #Queue()提供队列对象和方法
i=0
while i<=len(str)-1:
FIFO.put(str[i]) #使用put()将字符串依次放入队列
i+=1
while not FIFO.empty(): #输出,使用empty()检测是否为空
print(FIFO.get()) #使用get()获取元素
堆栈:也是从一端插入数据,但也从同一端取出并删除,插入时叫做进栈(Push)取出并删除时叫做出栈(Pop),栈数据进出叫做FILO(first in last out)
在Python中的简单使用:
stack=[]
for s in range(1,7):
stack.append(s)
print('after push:',stack)
i=1
while stack:
print('element %d is %d out'%(stack.pop(),i))
链表:是一种在内存里非连续、动态分配存储位置,数据元素之间是通过指针进行数据连接,链表主要由一系列结点(Node)组成,每个节点至少包含数据域(Data)和指针域(Next)两部分,数据与用于存储数据元素,指针与用于存储指向下一个节点的地址。单向链表最左端第一个结点为链表头(head)右边最后一个结点叫做链表尾(tail)。
在Python中的简单(其实一点也不简单,不推荐使用python编写链表)使用:
class Node(): # 定义节点类
def __init__(self, data=None, next=None): # 初始化类
self._data = data
self._next = next
def setData(self, NewData): # 设置节点的数值
self._data = NewData
def setNext(self, NewNext): # 设置节点的下一个地址
self._next = NewNext
def getData(self): # 得到节点的数值
return self._data
def getNext(self): # 得到节点的下一个地址
return self._next
class LinkedList(): # 建立链表类
def __init__(self): # 初始化类
self._head = Node() # 链表头
self._length = 0 # 链表长度
def tail_add(self, NewData): # 在链表尾部增加节点
NewNode = Node(NewData, None) # 新增一个节点
if self._length == 0: # 空链表
self._head = NewNode # 把新增节点对象赋值给head
self._length = 1 # 链表长度变1
else:
current = self._head
while current.getNext() != None: # 判断下一个地址是否None
current = current.getNext() # 根据地址next遍历链表
current.setNext(NewNode) # 找到链尾,增加新节点
self._length += 1 # 链表数量加一
def PrintLinkedList(self): # 遍历并打印节点数值
curr = self._head
while curr != None: # 判断下一个地址是否None
print('打印节点:%s' % (curr.getData()))
curr = curr.getNext()
def getLength(self):
return self._length
# ==================================调用链表类实例,并打印结果
foods = ['apple', 'water', 'juice', 'tomato']
newLinked = LinkedList() # 建立链表实例
for s in foods:
newLinked.tail_add(s) # 增加节点,并给每个节点赋值
print(newLinked.getLength()) # 打印链表节点数
newLinked.PrintLinkedList() # 打印所有的节点的值