看到这篇文的很多人大概都知道链表是个什么玩意了。简单说就是一个又一个的指针,指针之间用指针连接起来。
本文的阅读 适合有c++基础的人群
以下:
这叫做一个结点。
这就是一个链表。我们主要使用的是第一个结点上面没有数据,后面的结点有数据的链表。(别管为什么了,快试试吧。其实就是为了操作方便且统一)
由于不知道链表里面的数据类型,因此我们用C++中的模板。
template <class T> struct Node{ T data;//数据域中的数据 Node<T> *pnext;//指针域 用来指向下一个结点 };
我们把链表的实现封装成一个类,然后我们一个一个的来实现它。
template<class T> class LinkList{ public: LinkList();//建立不带数据的头结点 LinkList(T a[],int n);//建立头结点+把数组中的值变成链表中的值,建立一个单链表 ~LinkList();//析构函数 把链表中的结点一个个释放 void PrintList();//遍历单链表 int Length();//求单链表的长度 并返回单链表的长度(有数据的结点个数) T Get(int i);//返回第i个有数据结点的值 int Locate(T x);//返回数据域是x的那个结点的位置 void Insert(int i,T x);//在第i个结点处,插入数据域为x的另一个节点 T Delete(int i);//删除第i个结点,返回被删除结点的值 private: Node<T> *head;//头结点 };
下面是类方法的实现:
template<class T> LinkList<T>::LinkList() { head=new Node<T>; head->pnext=NULL; }
单链表的最后一个结点一定要指向NULL。由于这个是头结点,所以指向NULL。