单链表及其相关操作(注释详细)
啥都不说直接上代码!
#include<iostream> using namespace std; typedef int Status; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; //初始化 Status InitList(LinkList &L) { L=new LNode; L->next=NULL; return 1; } //取值 Status Get_Elem(LinkList L,int i,ElemType &e) { int j=0; LinkList p; p=L->next; while(j<i && p){ p=p->next; j++; } if(j<i || !p) return 0; e=p->data; } //查找 LNode *LocateElem(LinkList L,ElemType e) { LinkList p=L->next; while(p && p->data!=e) { p=p->next; } return p; } //插入 Status ListInsert(LinkList &L,int i,ElemType e) { //先找要插入位置 LinkList p=L; int j=0; while(p && j<i-1){//查找第i-1个结点,找到后在其后面插入 p=p->next; ++j; } //查找完后判断值是否合理 if(!p || j>i-1)//i>链表长度加1,或i<1 return 0; LinkList s=new LNode(); s->data=e; s->next=p->next;//新结点与后面结点建立联系 p->next=s;//新结点与前面结点建立联系 return 1; } //删除元素 Status ListDelete(LinkList &L,int i) { LinkList q;//用来存将被删除的结点的指针 LinkList p=L; int j; while(p && j<i-1) //查找第i-1个结点,找到后删除其后面那个结点; { p=p->next; j++; } if(!p->next || j>i-1) return 0; q=p->next; p->next=q->next;//将p与即将被删除后面那个结点相连 delete q; return 1; } //遍历链表元素 void TrvalList(LinkList L) { LinkList p; p=L->next; if(p==NULL) cout<<"该链表为空"<<endl; else { cout<<"该链表元素为:"; while(p){ cout<<p->data<<" "; p=p->next; } } cout<<endl; } void show() { cout<<"-----------链表相关操作-----------"<<endl; cout<<"1.链表初始化 2.取链表元素值 3.查找元素"<<endl; cout<<"4.插入元素 5.删除元素 6.遍历链表 0.退出"<<endl; } int main() { int i; int n; ElemType e; LinkList L; show(); cout<<"请选择"<<endl; cin>>n; while(true) { switch(n) { case 1: if(InitList(L)) cout<<"初始化成功!"<<endl; else cout<<"初始化失败!"<<endl; break; case 2: cout<<"请输入你要取值的位置"<<endl; cin>>i; if(Get_Elem(L,i,e)) cout<<"取值成功!第"<<i<<"个位置上的值为"<<e<<endl; else cout<<"取值失败!"<<endl; break; case 3: cout<<"请输入你要查找的值"<<endl; cin>>e; LocateElem(L,e); cout<<"元素的位置是:"<<LocateElem(L,e)<<endl; break; case 4: cout<<"请输入你要插入的位置(从1开始)"<<endl; cin>>i; cout<<"请输入你要插入的值"<<endl; cin>>e; if(ListInsert(L,i,e)) cout<<"插入成功"<<endl; else cout<<"插入失败"<<endl; break; case 5: cout<<"请输入你要删除数的位置"<<endl; cin>>i; if(ListDelete(L,i)) cout<<"删除成功"<<endl; else cout<<"删除失败"<<endl; break; case 6: TrvalList(L); break; case 0: cout<<"你选择了退出"<<endl; return 0; } show(); cout<<"请选择"<<endl; cin>>n; } return 0; }
可能有bug欢迎指正哈
5/4链表练习
下一篇:
数据结构学习笔记:递归