啥都不说直接上代码!
#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.链表初始化\t2.取链表元素值\t3.查找元素"<<endl;
cout<<"4.插入元素\t5.删除元素\t6.遍历链表\t0.退出"<<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链表练习