單鏈表的衍生,許多函數和單鏈表想同,多了一個first表頭結點。
帶表頭結點的數據域element不存放線性表中的元素,要么為空,要么存放輔助數據。
有了表頭結點以后,單鏈表中每個元素結點都有一個前驅結點,簡化了插入和刪除操作的描述。
給出構造函數,插入函數以及刪除函數的實現代碼。
實現代碼:
~~~
template<class T>
HeaderList<T>::HeaderList()
{
Node<T> *first = new Node<T>;
first -> Link = NULL;
n = 0;
}
template<class T>
bool HeaderList<T>::Insert(int i, T x) // 在i后插入x
{
if(i < -1 || i > n - 1) { // i不在范圍內
cout << "Out of Bounds" << endl;
return false;
}
Node<T> *p = first;
for(int j = 0; j <= i; ++j) // 結束循環時 P指向i
p = p -> Link;
Node<T> *q = new Node<T>;
q -> element = x;
q -> Link = p -> Link;
p -> Link = q;
n++;
return true;
}
template<class T>
bool HeaderList<T>::Delete(int i)
{
if(!n) { // 空鏈表
cout << "UndeFlow" << endl;
return false;
}
if(i < 0 || i > n - 1) {
cout << "Out of << Bounds" << endl;
return false;
}
Node<T> *q = first, *p;
for(int j = 0; j < i; ++i) // 結束循環時 q指向i - 1
q = q -> Link;
p = q -> Link;
q -> Link = p -> Link;
delete p;
n--;
return true;
}
~~~
- 前言
- 線性表的順序表示:順序表ADT_SeqList
- 結點類和單鏈表ADT_SingleList
- 帶表頭結點的單鏈表ADT_HeaderList
- 堆棧的順序表示ADT_SeqStack
- 循環隊列ADT_SeqQueue
- 一維數組ADT_Array1D
- 稀疏矩陣ADT_SeqTriple
- 數據結構實驗1(順序表逆置以及刪除)
- 數據結構實驗1(一元多項式的相加和相乘)
- 二叉樹ADT_BinaryTree
- 優先隊列ADT_PrioQueue
- 堆ADT_Heap
- 數據結構實驗2(設計哈弗曼編碼和譯碼系統)
- ListSet_無序表搜索
- ListSet_有序表搜索
- ListSet_對半搜索的遞歸算法
- ListSet_對半搜索的迭代算法
- 二叉搜索樹ADT_BSTree
- 散列表ADT_HashTable
- 圖的鄰接矩陣實現_MGraph
- 圖的鄰接表實現_LGraph
- 數據結構實驗2(二叉鏈表實現二叉樹的基本運算)
- 數據結構實驗3(圖的DFS和BFS實現)
- 數據結構實驗3(飛機最少環城次數問題)
- 拓撲排序的實現_TopoSort
- 數據結構實驗4(排序算法的實現及性能分析)