链式存储结构类的实现 (实现函数)(包括插入,删除等操作的实现)
2013-10-15 00:06
113 查看
//程序名:类定义.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; else if (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; } else return 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; } } }
相关文章推荐
- 实现两个函数,分别完成数组元素的插入和删除操作
- 实现函数功能对数组元素进行插入、删除、查询操作
- java 实现 文件操作工具集。包括文件、目录树的拷贝、删除、移动、查找等工具函数
- 实现函数功能对数组元素进行插入、删除、查询操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 如何使用c语言实现双向链表的插入删除操作
- C++实现二叉排序树BSTree --插入删除摧毁查找等操作
- C语言 有序双链表实现插入、删除、打印(正反)等简单操作
- Java创建二叉搜索树,实现搜索,插入,删除的操作实例
- 二叉树:实现java操作二叉排序树(生成、插入、遍历、删除)
- C#File类常用的文件操作方法(创建、移动、删除、复制等) File类,是一个静态类,主要是来提供一些函数库用的。静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和
- 笔试题:创建一个单链表,结点包含学生的学号,姓名,性别,年龄信息.写几个程序,实现按学生学号插入,查询,删除等操作.
- 【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- jsp操作MySQL实现查询、插入与删除功能(query、insert、delete)
- Java创建二叉搜索树,实现搜索,插入,删除操作
- Mysql创建触发器实现不同表的插入、更新、删除操作
- 线性表的基本操作,包括:创建、插入、删除、查找等基本操作
- 【数据结构】用C++实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- 单链表基本操作的实现--创建、插入、查找、删除