链式存储结构类的实现 (实现函数)(包括插入,删除等操作的实现)

来源:互联网 发布:国内查找数据的网站 编辑:程序博客网 时间:2024/05/18 03:17
//程序名:类定义.h//      程序功能:链式存储结构类的实现(包括插入,删除等操作的实现)//          作者:吴雨羲//          日期:2013.9.30//          版本:1.0//      修改内容:无//      修改日期://      修改作者://#include<iostream>using namespace std;//定义单链表的结点结构struct Node{int data;Node *next;};//定义单链表类class List{public:List();//定义构造函数 void H_Insert();//头插入建链void T_Insert();//尾插入建链void Insert(int i,int val);//插入void Delete(int i);//删除void Search(List list);//查找int Lenth();//链表长度void Reverse();//逆置void Print();//输出int Testcin(int i,int len);//检验输入bool Testlist();//测试链表是否为空~List();//析构函数private:Node *first;//表头指针};


//程序名:类实现.cpp//      程序功能:链式存储结构类的实现(包括插入,删除等操作的实现)//          作者:吴雨羲//          日期:2013.9.30//          版本:1.0//      修改内容:无//      修改日期://      修改作者://#include<iostream>#include"类定义.h"using namespace std;////////////////////////////////////////////////////////////////////////////////  构造函数//  函数功能:定义一个表头节点无初值//函数参数:无    //参数返回值:无List::List(){first=new Node;first->next=0;}//////////////////////////////////////////////////////////////////////////////// 析构函数// 函数功能:将链表空间释放//函数参数:无//参数返回值:无List::~List(){Node *p;while(first){p=first;first=first->next;delete p;}}////////////////////////////////////////////////////////////////////////////////  头插入建链函数//  函数功能:以头插入方式建立有n个节点的链表//函数参数:无//       //参数返回值:无//void List::H_Insert(){int n;cout<<"输入链表元素个数"<<endl;cin>>n;cout<<"输入元素"<<endl;Node *p,*head=0;int i;for(i=0;i<n;i++){p=new Node;cin>>p->data;p->next=head;head=p;}first->next=head;}////////////////////////////////////////////////////////////////////////////////  尾插入建链函数//  函数功能:以尾插入方式建立有n个节点的链表//函数参数:无//             //参数返回值:无//void List::T_Insert(){int n;cout<<"输入链表元素个数"<<endl;cin>>n;cout<<"输入元素"<<endl;Node *tail=new Node;tail=first;Node *p;int i;for(i=0;i<n;i++){p=new Node;cin>>p->data;p->next=0;tail->next=p;tail=p;}}////////////////////////////////////////////////////////////////////////////////  插入元素函数//  函数功能:将新值插入到指定位置//函数参数://       i   第i位 //      val  新值     //参数返回值:无//void List::Insert(int i,int val){Node *head=first;Node *r,*p;int t;for(t=0;t<i;t++){r=head;head=head->next;}p=new Node;p->data=val;r->next=p;p->next=head;}////////////////////////////////////////////////////////////////////////////////  删除元素函数//  函数功能:将指定位置元素删除//函数参数://       i   第i位    //参数返回值:无//void List::Delete(int i){Node *head=first;Node *r;int t;for(t=0;t<i;t++){r=head;head=head->next;}r->next=head->next;delete head;}////////////////////////////////////////////////////////////////////////////////  查找函数//  函数功能:查找有无相应元素//函数参数://       list 类对象    //参数返回值://       无  //void List::Search(List list){int val;cout<<"输入要查找的元素"<<endl;cin>>val;Node *head=first->next;while(head){if(head->data==val){cout<<"查找成功"<<endl;return ;}head=head->next;}if(head==0){cout<<"没有该元素"<<endl;cout<<"请核对";list.Print();}}////////////////////////////////////////////////////////////////////////////////  链表长度函数//  函数功能:输出表长//函数参数:无//参数返回值://       count 表长//int List::Lenth(){int count=0;Node *head=first->next;while(head){head=head->next;count++;}return count;}////////////////////////////////////////////////////////////////////////////////  元素逆置输出函数//  函数功能:元素逆置输出//函数参数:无//参数返回值:无//void List::Reverse(){Node*head=first->next;Node*h=0,*p;while(head){p=head->next;head->next=h;h=head;head=p;}first->next=h;}////////////////////////////////////////////////////////////////////////////////  输出函数//  函数功能:元素输出//函数参数:无//参数返回值:无//void List::Print(){cout<<"当前元素序列"<<endl;Node*head=first->next;while(head){cout<<head->data<<" ";head=head->next;}cout<<endl;}////////////////////////////////////////////////////////////////////////////////  检验输入函数//  函数功能:检验插入或删除指定位置是否合法//函数参数://       i   第i位 //       len 序列长度   //参数返回值:i 合法位置//int List::Testcin(int i,int len){while(i>len||i<=0){if(i>len)cout<<"插入位置太靠后了,当前序列只有 "<<len<<" 位"<<endl;elseif (i<=0) cout<<"输入的位置错误,位置应该大于0。"<<endl;cout<<"请重新输入合适的位置"<<endl;cin>>i;}return i;}////////////////////////////////////////////////////////////////////////////////  检验链表函数//  函数功能:检验检验链表是否为空//函数参数://       i   第i位 //       len 序列长度   //参数返回值://       true 链表不为空 //       false 链表为空//bool List::Testlist(){if(first->next==0){cout<<"        错误!请先进行链表初始化,选择 选项 1        "<<endl;cout<<endl;return false;}elsereturn true;}

//程序名:链式存储操作.cpp//      程序功能:链式存储操作主程序(包括插入,删除等操作的实现)//          作者:吴雨羲//          日期:2013.9.30//          版本:1.0//      修改内容:无//      修改日期://      修改作者://#include<iostream>#include"类定义.h"using namespace std;void main(){List list;int choice,finish=1;int n,val,real_n;while(finish){cout<<endl;cout<<"             ************************菜单*****************************"<<endl;cout<<"             **     1:链表初始化   2:尾插入建链    3:头插入建链     **"<<endl;cout<<"             **     4:插入元素     5:删除元素      6:查找元素       **"<<endl;        cout<<"             **     7:输出元素个数 8:元素逆置输出  9:退出           **"<<endl;        cout<<"             *********************************************************"<<endl;cout<<"请选择你要执行的选项(1-9):";cin>>choice;switch (choice){case 1:case 2:list.T_Insert();list.Print();break;case 3:list.H_Insert();list.Print();break;case 4:if(!list.Testlist())break;list.Print();cout<<"输入插入位置"<<endl;cin>>n;        real_n=list.Testcin(n,list.Lenth());cout<<"输入插入元素值"<<endl;cin>>val;list.Insert(real_n,val);list.Print();break;case 5:if(!list.Testlist())break;list.Print();cout<<"请输入要删除的位置"<<endl;     cin>>n;real_n=list.Testcin(n,list.Lenth());list.Delete(real_n);cout<<"当前元素序列"<<endl;list.Print();break; case 6:if(!list.Testlist())break;list.Search(list);break;case 7:if(!list.Testlist())break;cout<<"表长为"<<list.Lenth()<<endl;break;case 8:if(!list.Testlist())break;list.Print();list.Reverse();list.Print();break;case 9:finish=0;break;default:cout<<"没有此选项"<<endl;break;}}}


原创粉丝点击