#include<iostream>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType date;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L) //初始化
{
L=new LNode;
L->next=NULL;
return OK;
}
Status GetElem(LinkList L,int i,ElemType &e) //取值
{
int j=1;
LinkList p;
p=L->next;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return ERROR;
e=p->date;
return OK;
}
Status LocateElem(LinkList L,ElemType e ) //查找
{
LinkList p;
p=L->next;
while(p&&p->date!=e)
{
p=p->next;
}
if(!p||p->date!=e)
return ERROR;
if(e==p->date)
return OK;
}
Status ListInsert(LinkList &L,int i,ElemType e) //插入
{
LinkList p=L,s;
int j=0;
while(p&&(j<i-1))
{
p=p->next;
j++;
}
if(!p)
return ERROR;
s=new LNode;
s->date=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete(LinkList &L,int i) //删除
{
LinkList p=L,q;
int j=0;
while((p->next)&&(j<i-1))
{
p=p->next;
j++;
}
if(!(p->next)||(j>i-1))
return ERROR;
q=p->next;
p->next=q->next;
delete q;
return OK;
}
Status CreatList(LinkList &L,int n) //尾插法输入数据
{
LNode *r,*p;
L=new LNode;
L->next=NULL;
r=L;
for(int i=0;i<n;i++)
{
p=new LNode;
cin>>p->date;
p->next=NULL;
r->next=p;
r=p;
}
return OK;
}
void OutputList(LinkList L) //输出
{
LinkList p=L->next;
while(p)
{
cout<<setw(4)<<p->date;
p=p->next;
}
}
int main()
{
cout<<"1.初始化 2.输入 3.取值 4.查找 5.插入 6.删除 7.输出 0.退出";
cout<<endl;
LinkList L;
int choose=8,n;
ElemType e;
while(choose!=0)
{
cout<<endl;
cout<<"请选择:";
cin>>choose;
switch(choose)
{
case 1:{
if(InitList(L))
cout<<"成功建立单链表"<<endl;
else
cout<<"初始化失败"<<endl;
break;
}
case 2:{
cout<<"请输入数据的位数:";
cin>>n;
cout<<"请输入数据:"<<endl;
if(CreatList(L,n))
cout<<"输入成功"<<endl;
else
cout<<"输入失败"<<endl;
break;
}
case 3:{
cout<<"请输入取值的位置:";
cin>>n;
if(GetElem(L,n,e))
cout<<"取值成功,第"<<n<<"个为:"<<e<<endl;
else
cout<<"取值失败"<<endl;
break;
}
case 4:{
cout<<"请输入查找的数据:";
cin>>e;
if(LocateElem(L,e))
cout<<"查找成功"<<endl;
else
cout<<"查找失败"<<endl;
break;
}
case 5:{
cout<<"请输入插入的位置:";
cin>>n;
cout<<"请输入插入的数据:";
cin>>e;
if(ListInsert(L,n,e) )
cout<<"插入成功"<<endl;
else
cout<<"插入失败"<<endl;
cout<<"当前数据为:";
OutputList(L);
cout<<endl;
break;
}
case 6:{
cout<<"请输入删除的位置:";
cin>>n;
if(ListDelete(L,n) )
cout<<"删除成功"<<endl;
else
cout<<"删除失败"<<endl;
cout<<"当前数据为:";
OutputList(L);
cout<<endl;
break;
}
case 7:{
cout<<"当前链表数据为:";
OutputList(L);
cout<<endl;
break;
}
}
}
return 0;
}
单链表的实现(基于C++)
最新推荐文章于 2023-03-27 16:53:31 发布