#include <iostream>
#define ListNodePosi(T) ListNode<T>*//指针指向列表的结点:里面含有两个指针pred和succ
typedef int Rank;
template <typename T>
class ListNode//列表节点模板类(以双向链表形式实现)
{
public:
T data;
ListNode<T>* pred;//节点的前驱指针:指向前结点,而不是前节点的前驱或后驱指针
ListNode<T>* succ;//节点的后继指针:指向后结点,而不是后节点的前驱或后驱指针
//构造函数
ListNode(){}
ListNode(T e, ListNodePosi(T) p = NULL, ListNodePosi(T) s = NULL) :data(e), pred(p), succ(s)
{
//默认构造器
}
//操作接口
ListNode<T>* insertAsPred(T const& e);//结点前插入
ListNode<T>* insertAsSucc(T const& e);//结点后插入
};
//note:链表节点类主要用于构建列表,所以直接用public
#include "listNode.h"
template <typename T>
class List
{
private://私有的头哨兵和尾哨兵对外部不可见(eg:valid中从外部被等效的视为NULL),首节点尾结点是头哨兵之后的,尾哨兵之前的
int _size;
ListNode<T>* header;//头哨兵:header->succ代表头结点
ListNode<T>* trailer;//尾哨兵
protected:
void init();
int clear();
void copyNodes(ListNodePosi(T) p, int n);
void merge(ListNodePosi(T)&, int, List<T>&, ListNodePosi(T), int);//有序列表区间合并
void merge(List<T>& L) { merge(first(), size, L, L.first(), _size); }//全列表合并
void mergeSort(ListNodePosi(T)& p, int n);//对从p开始的n个节点归并排序
void selectionSort(ListNodePosi(T) p, int n);//...选择排序
void insertionSort(ListNodePosi(T) p, int n);//插入排序
public:
List() { init(); }
List(List<T> const& L);
List(List<T> const& L, Rank r, int n);
List(ListNodePosi(T) p, int n);
~List();//释放所有节点
..............
}
链表List与链表节点ListNode
猜你喜欢
转载自blog.csdn.net/vict_wang/article/details/81590545
今日推荐
周排行