Linklist

来源:互联网 发布:浙江淘宝总部地址 编辑:程序博客网 时间:2024/05/16 02:21
</pre><pre name="code" class="cpp">#ifndef Linklist_H                //避免重复包含Linklist.h头文件#define Linklist_H                  template<class DataType>          //定义单链表的结点struct Node{DataType data;Node<DataType> *next;};template <class DataType>                 //类Linklist的声明class Linklist{public:Linklist();Linklist(DataType a[],int n);                //建立有n个元素的单链表~Linklist();                               //析构函数int Locate(DataType x);                     //在单链表中查找值为x的元素序号void Insert(int i,DataType x);            //在第i个位置插入元素值为x的结点DataType Delete(int i);                     //在单链表中删除第i个结点void PrintList();                          //按序号依次输出各元素private:Node<DataType>*first;                       //单链表的头指针};#endif

#include<iostream>                     //引入输入输出流using namespace std;#include"Linklist.h"                     //引入类Linklisttemplate <class DataType>                 //类Linklist的成员函数定义Linklist<DataType>::Linklist(){first=new Node<DataType>                   //生成头结点first->next=null;                         //头结点的指针域置空}template <class DataType>Linklist<DataType>::Linklist(DataType a[],int n){Node<DataType>*r,*s;first=new Node<DataType>;                //生成头结点r=first;                                   //尾指针初始化for(int i=0;i<n;i++){s=new Node<DataType>;                //为每个数组元素建立一个结点s->data=a[i];                      //将结点s插入到终端结点之后r->next=s;r=s;}r->next=NULL;                            //将终端结点的指针域置空}template<class DataType>Linklist<DataType>::~Linklist(){Node<DataType>*q=NULL;                            //释放单链表的每一个结点的存储空间while(first!=NULL){q=first;                                      //暂存被释放结点first=first->next;                          //first指向被释放结点的下一个结点delete q;}}template<class DataType>void Linklist<DataType>::Insert(int i,DataType x){Node<DataType>*p=first,*s=NULL;                //工作指针p指向头结点int count=0;while(p!=NULL&&count<i-1)                        //查找第i-1个结点{p=p->next;                                    //工作指针p后移count++;}if(p==NULL)throw"位置";                          //没有找到第i-1个结点else{s=new Node<DataType>;s->data=x;                 //结点s的数据与为xs->next=p->next;p->next=s;                     //将结点s插入到结点p之后}}template<class DataType>DataType Linklist<DataType>::Delete(int i){  Node<DataType>*p=first,*q=NULL;DataType x;int count=0;while(p!=NULL&& count<i-1){p=p->next;count++;}if(p==NULL||p->next==NULL)throw"位置";else{q=p->next;x=q->data;p->next=q->next;delete q;return x;}}template<class DataType>int Linklist<DataType>::Locate(DataType x){Node<DataType>*p=first->next;int count=1;while(p!=NULL){if(p->data==x)return count;p=p->next;count++;}return 0;}template<class DataType>void Linklist<DataType>::PrintList(){Node<DataType>*p=first->next;while(p!=NULL){cout<<p->data<<"";p=p->next;}cout<<endl;}

#include<iostream>                     //引入输入输出流using namespace std;#include"Linklist1.cpp" void main(){int r[5]={1,2,3,4,5};    Linklist<int>L(r,5);cout<<"执行插入操作前数据为:"<<endl;L.PrintList();                               //显示链表中的所有元素try{L.Insert(2,3);                                  //在第2个位置插入值为3的元素}catch(char*s){cout<<s<<endl;}cout<<"执行插入操作后数据为:"<<endl;L.PrintList();                                 //显示单链表的所有元素cout<<"值为5的元素位置为:";cout<<L.Locate(5)<<endl;                             //查找元素5,并返回在单链表中位置    cout<<"执行删除操作前数据为:"<<endl;L.PrintList();                                    //显示单链表的所有元素try{L.Delete(1);                                      //删除第1个元素}catch(char *s){cout<<s<<endl;}cout<<"执行删除操作后数据为:"<<endl;L.PrintList();                                    //显示单链表的所有元素}


0 0
原创粉丝点击