单链表的增删查改功能

单链表的增删查改功能的实现
#include<iostream> using namespace std; class LinkNode { friend class List; private: int date; LinkNode *link; LinkNode(const int& d=int()):date(d),link(NULL) }; class List { public: void CreatList(int ); bool Insert(int i,int& x); bool Remove(int i,int& x); void PrintList(); int Find(const int& date); int FindPos(int pos); void Update(const int &e,const int &ne); void Showmeun(); private: LinkNode *first; }; #include"List.h" void List::CreatList(int n) { LinkNode *p,*q; first=new LinkNode; first->link=NULL; p=first; for(int i=0;i<n;i++) { cout<<"请输入第"<<i+1<<"个数: "; q=new LinkNode; cin>>q->date; q->link=p->link; p->link=q; p=q; } }
-1-

{}

bool List::Insert(int i, int &x) { if(first==NULL||i==0) { LinkNode *newNode=new LinkNode(x); if(newNode==NULL) {cerr<<"存储分配错误!"<<endl;exit(i);} newNode->link=first;first=newNode; } else { LinkNode *p=first; for(int k=1;k<i;k++) if(p==NULL) break; else p=p->link; if(p==NULL) {cerr<<"无效的插入位置!"<<endl;return false;} else { LinkNode *newNode=new LinkNode(x); if(newNode==NULL) {cerr<<"存储分配错误!"<<endl;exit(1);} newNode->link=p->link; p->link=newNode; } } return true; } bool List::Remove(int i, int &x) { LinkNode *del,*p; if(i<=1) {del=first;first=first->link;} else { p=first; for(int k=1;k<i;k++) if(p==NULL) break; else p=p->link; if(p==NULL||p->link==NULL)
-2-

{cerr<<"无效的删除位置!"<<endl;return false;} del=p->link; p->link=del->link; } x=del->date;delete del; return true; }; void List::Showmeun() { cout<<"********链表的增删查改功能*********"<<endl; cout<<" 1-链表全部数据的输出"<<endl; cout<<" 2-链表插入元素"<<endl; cout<<" 3-链表删除元素"<<endl; 4-链表查找元素"<<endl; cout<<" cout<<" 5-链表数据的修改"<<endl; cout<<" 0-退出 "<<endl; cout<<"*********************************"<<endl; 请输入功能序号:"<<endl; cout<<" } void List::PrintList() { LinkNode *p; cout<<"输出单链表为:"; p=first->link; while(p!=NULL) { cout<<p->date<<" "; p=p->link; } cout<<endl; } int List::Find(const int &date) { LinkNode *p; p=first; for(int k=0;p!=NULL;k++) { if(p->date==date) return k; p=p->link; } return -1; } int List::FindPos(int pos)
-3-

{ if(pos<1) { cerr<<"位置超出范围!"<<endl; exit(1); } LinkNode* p=first; int i=-1; while(p!=NULL) { i++; if(i==pos) break; p=p->link; } if(p!=NULL) return p->date; else { cerr<<"位置超出范围!"<<endl; exit(1); } return -1; } void List::Update(const int &e,const int &ne) { LinkNode *p = first; LinkNode *q = first; while(p != NULL && p->link != NULL){ q = p->link; if(e == q->date){ q->date = ne; continue; } p = p->link; } } #include"List.h" void main() { List link;
-4-

int n,choice,i,x,y; cout<<"请输入链表中元素的个数,建立链表:"<<endl; cin>>n; link.CreatList(n); link.Showmeun(); cin>>choice; while(choice!=0) { switch(choice) { case 1: link.PrintList(); break; case 2: cout<<"请输入你要插入元素的位置:"<<endl; cin>>i; cout<<"请输入你要插入元素的值:"<<endl; cin>>x; link.Insert(i,x); break; case 3: cout<<"请输入你要删除元素的位置:"<<endl; cin>>i; link.Remove(i,x); break; case 4: cout<<"******************"<<endl; cout<<"1-按元素的数值查找"<<endl; cout<<"2-按元素的位置查找"<<endl; cout<<"******************"<<endl; cout<<"请选择:"<<endl; cin>>x; if(x==1) { cout<<"请输入要查找的数据:"<<endl; cin>>x; i=link.Find(x); if(i!=-1) cout<<"在第"<<i<<"个位置找到数据:"<<x<<endl; else cout<<"没有找到数据!"<<endl; } else {
-5-

cout<<"请输入需要查找元素位置"<<endl; cin>>i; x=link.FindPos(i); cout<<"第"<<i<<"个位置的数据为:"<<x<<endl; } break; case 5: cout<<"请输入原数据和更改后的数据:"<<endl; cin>>x>>y; link.Update(x,y); cout<<"你已经成功的将"<<x<<"改成了"<<y<<"!"<<endl; break; } cout<<"请输入功能序号:"<<endl; cin>>choice; } }

-6-


相关文档

单链表的增删改查及合并
单链表增删改查
单链表的增删改查插入
单链表的增删查改
单链表增删改查操作C++
对表的增删改查
Struts2完整对商品表的增删查改
单链表以及单链表的建立、清空、查找、修改等运算。
单表增删改查说明文档
对数据表的增删改查(.net)
电脑版