python數據結構:數組、列表、棧、隊列及實現

首先,咱們要分清楚一些概念和他們之間的關係python

數組(array) 表(list) 鏈表(linked list) 數組鏈表(array list) 隊列(queue) 棧(stack)數組

python數據結構:數組、列表、棧、隊列及實現
list列表數據結構

array數組app

python中內置list數據結構 存放的數據類型能夠不一樣。學習

可是有個缺點 list存放的是數據的索引也就是指針 這須要數據的原有存儲加上數據的指針 增長了消耗。ui

python中numpy庫的array 存放單一類型數據 。操作系統

python中數組並非基本數據類型 可是能夠調用array庫 或者numpy庫使用數組array 。指針

array庫只能建立一維數組 numpy中的數組適用性很是廣 建議使用numpy。code

1 import array
2 arr=array.array('i',[1,2,3,4]) #建立數組
3 print(arr,type(arr))

相互轉換索引

1 import numpy as np
2 arr=np.array([1,2,3,4]) #建立數組
3 li=arr.tolist() #數組轉換爲列表
4 new_arr=np.array(li) #列表轉數組
5 print(arr,type(arr))
6 print(li,type(li))
7 print(new_arr,type(new_arr))
#輸出
[1 2 3 4] <class 'numpy.ndarray'>
[1, 2, 3, 4] <class 'list'>
[1 2 3 4] <class 'numpy.ndarray'>

能夠發現list元素之間有逗號隔開,array之間沒有符號隔開

Queue隊列 -只容許在一段進行刪除操做在另外一端進行插入操做的數組結構

Stack棧 -刪除與插入操做在同一端進行的數組結構

特色

Queue -先進先出 FIFO first in first out

Stack -先進後出 FILO first in last out

共同點:棧和隊列都是一種操做受限制的線性表

用途:棧:表達式的括號匹配問題,迷宮求解

隊列:銀行排隊,操做系統進程問題,舞伴問題

身爲老司機,仍是得分享些乾貨精品學習資料的,推薦下小編建立的Python學習交流羣556370268,送給每一位小夥伴,這裏是小白彙集地,天天還會直播和你們交流分享經驗哦,歡迎初學和進階中的小夥伴。

python實現隊列:(有註釋)

1 class Node(object):
 2 def __init__(self,val): #節點傳入值
 3 self.next=None #每一個節點定義2個屬性 next指向下一個位置
 4 self.val=val # val 節點的值
 5 
 6 class Queue(object):
 7 def __init__(self):
 8 self.first=None #每一個隊列定義2個屬性 first刪除端
 9 self.last=None # last插入端
10 
11 def enqueue(self,n):
12 n=Node(n)
13 if(self.first==None): #若是隊列爲空
14 self.first=n
15 self.last=n
16 else: #若是隊列不爲空
17 self.last.next=n #插入端的指向爲n
18 self.last=n #插入端的最後一個值爲n
19 
20 def dequeue(self):
21 if (self.first==None):
22 return None
23 else:
24 reval=self.first.val
25 self.first=self.first.next #將刪除端的第一個指定爲下一個
26 return reval
27 def allquit(self): # allquit做用:隊列中元素放入list中方便打印
28 alist=[]
29 while (self.first!=None): #循環
30 temp=self.first.val #和dequeue的操做相同
31 self.first=self.first.next
32 alist.append(temp)
33 return alist
34 
35 if __name__ == "__main__":
36 q=Queue()
37 q.enqueue(1)
38 q.enqueue(2)
39 q.enqueue(3)
40 q.dequeue()
41 print(q.allquit())

python實現棧:(有註釋)

1 class Node(object):
 2 def __init__(self,val):
 3 self.next=None
 4 self.val=val
 5 class Stack(object):
 6 def __init__(self):
 7 self.top=None #和queue不一樣棧刪除插入都在一端 因此只定義一個位置
 8 
 9 def push(self,n):
10 n=Node(n)
11 if(self.top==None): #若是棧爲空
12 self.top=n
13 else:
14 n.next=self.top #插入元素的下一個爲頂格元素
15 self.top = n #頂格元素爲插入值
16 
17 def pop(self): #刪除頂格元素
18 if(self.top==None): #若是棧爲空
19 return None
20 else:
21 temp=self.top.val
22 self.top=self.top.next #新的頂格元素爲老頂格元素的上一個
23 return temp
24 
25 def allquit(self): #打印棧方法
26 alist=[]
27 while(self.top!=None): #循環
28 temp=self.top.val #和pop()方法操做相同
29 self.top=self.top.next
30 alist.append(temp)
31 print(alist)
32 
33 if __name__== "__main__" :
34 s=Stack()
35 s.push(1)
36 s.push(3)
37 s.push(5)
38 s.pop()
39 s.allquit()
相關文章
相關標籤/搜索