陣列的缺點:在有序陣列插入資料的時候,後面的資料需要向後移動;在有序陣列中刪除資料時,後面的陣列元素需要向前移動,導致速度相對較慢。
下圖是在有序陣列中刪除元素202的示意圖。
鍊錶的提出:鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 鍊錶允許插入和移除表上任意位置上的節點,但是不允許隨機訪問。
在鍊錶中插入/刪除元素,不需要移動,下圖是在已經排好序的陣列中插入元素200的示意圖。
以友元類實現如下鍊錶:
以巢狀類實現如下鍊錶:
**示例:
#ifndef threeletterlist_h
#define threeletterlist_h
#includeclass threeletterlist
; threeletternode* first;
};void threeletterlist::test()
void threeletterlist::show()
#endif
#include#include "threeletterlist.h"
using namespace std;
class list;
class node
;class list
;void list::test()
void list::show()
int main()
鍊錶功能:插入:insert()、刪除:delete()、反**invert()、連線:concatenate().
**示例:
#ifndef mylist_h
#define mylist_h
#includetemplate class list;
template class listnode
;template class list
;//空列表
void insert(type);
void delete(type);
void invert();
void concatenate(list);
void show();
private:
listnode*first;
};template listnode::listnode(type element)
templatevoid list::insert(type k)
templatevoid list::delete(type k)
}templatevoid list::invert()
first = q;
}templatevoid list::concatenate(listb)
; if (b.first)
}templatevoid list::show()
std::cout << std::endl;
}#endif
#include#include"mylist.h"
using namespace std;
int main()
資料結構與演算法(五)
雙端鍊錶和雙向鍊錶 一.雙端鍊錶 1.什麼是雙端鍊錶 鍊錶中儲存著對最後乙個鏈結點的引用的鍊錶 2.從頭部進行插入 要對鍊錶進行判斷,如果為空則設定尾結點為新新增的結點。3.從尾部進行插入 如果鍊錶為空,則直接設定頭結點為新新增的結點,否則設定尾結點的後乙個結點為新新增的結點。4.從頭部進行刪除 判...
資料結構與演算法(五)
三根針xyz,x上64個圓盤 設計思路 if n 1時,x z else 執行n 1的操作,直到n 1 1 由零個或多個字元組成的有限序列 是用一組位址連續的儲存單元來儲存串中的字串行,按照預定義的大小,為每個定義的字串變數分配乙個固定長度的儲存區,一般用定長陣列來定義 一般用順序儲存 樸素的模式匹...
資料結構與演算法學習筆記五 氣泡排序演算法
氣泡排序演算法原理 從未排序的序列的開頭開始,比較相鄰的兩個元素,將值大 小 放在右邊,每輪比較完成都會將最大 最小 放在最後一位,下一輪就只要從開頭比較到倒數第二個。以此類推,直到序列排序完畢。對於乙個有n個元素的序列,需要進行 n 1 輪迴圈比較.如下 ef bubble sort alist ...