1.對於表的所有操作來說,都可以使用陣列來實現,而且陣列雖然是靜態分配的,但內部儲存陣列的vector類卻允許在需要時將陣列的大小增加一倍。
2.正是因為陣列的實現,使得printlist以線性時間來執行,而findkth甚至是通過常數時間。最不濟的是插入和刪除了,如果位置不好,比如說在0號位置插入就需要將整個陣列的所有元素都向後移,為o(n)。正是為了避免插入和刪除的線性開銷,我們就開始使用一種叫做鍊錶(linked list)的技術。
3.鍊錶由許多在記憶體中相連的結點(node)組成,而每乙個結點都有表元素和該元素後續元的結點的鏈(link)。這個叫做next鏈,自然而然地,最後乙個單元的next鏈指向null。
4.stl的全稱是「standard template library」,中文名叫做「標準模板庫」。表adt就在其中。
5.陣列就是一塊指向記憶體的指標變數,記憶體塊可以通過new來分配,同時也必須用delete來釋放,記憶體塊的大小不能改變。
6.將乙個包含x的新結點通過p和p.prev指向的結點結合,指標的賦值可以按下面的方式來寫。
node *newnode=
new node(x,p->prev,p);
p->prev->next=newnode;
p->prev=newenode;
但它還可以得到合併:
node *newnode=
new node(x,p->prev,p);
p->prev=p->prev->next=newnode;
然後它還可以進一步合併:
p->prev=p->prev->next=
new node(x,p->prev,p);
因此可以這樣來寫insert操作:
iterator insert(iterator itr,const object & x)
7.同樣的,對於雙向列表的delete操作來說,會是這樣:
p->prev->next=p->next;
p->next->prev=p->prev;
delete p;
修改之後的insert函式。
iterator insert(iterator itr,const
object & x)
資料結構 回顧棧ADT和隊ADT
1.簡單的說,棧就是只在乙個位置上進行插入和刪除操作的表,而這個特殊的位置就是表的末端,但這卻不被成為棧的末端,而是頂 top 2.棧的基本操作時進棧和出棧,英文名分別是push和pop,分別相當於插入和刪除。切記對空棧進行pop和top操作在棧adt被認為是錯誤的,而如果push在空間之外進行操作...
回顧資料結構 鍊錶
鍊錶真不是個東西 附上靈魂畫圖一張 private node dummyhead 虛擬頭節點 int size 無參建立鍊錶 public linkedlist 建立鍊錶,並將陣列放到鍊錶上 public linkedlist e e 獲得鍊錶長度 public int getsize 判斷是否為空...
資料結構 回顧雜湊表
1.雜湊表 hash table 的實現成為雜湊 hashing 是一種以常數平均時間執行輸入 刪除和查詢的技術。但是那些需要元素間任何排序資訊的數操作將不會得到有效的支援。2.雜湊函式示例 int hash const string key,int tablesize int hash const...