单链表的衍生,许多函数和单链表想同,多了一个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(排序算法的实现及性能分析)