#include<iostream.h>
typedef int ElemType;
typedef struct lnode
{
ElemType data;
struct lnode *next;
}Lnode,*Linklist;
void CreateList(Linklist &L,int n)
{
L=new Lnode;
L->data=NULL;
L->next=NULL;
Linklist rear=L;//定义指向Lnode结构体指针rear,并指向L
cout<<"请输入"<<n<<"位数字"<<'\n';
for (int i=0; i<n; i++)
{
Linklist s=new Lnode;
cin>>s->data;
rear->next=s;
rear=s;
}
rear->next=NULL;
}
void Insert(Linklist &L,int i, ElemType x)
{
Linklist p=L;
int j=0;
while (j<i-1)//第i个元素之前停下
{
p=p->next;
j++;
}
if (!p) cout<<"位置不合理";//如果i-1已经超出链表的范围
else
{ Linklist s=new Lnode;
s->data=x;
s->next=p->next;
p->next=s;
}
}
void Delete(Linklist &L,int i)
{ Linklist p=L;
int j=0;
while (j<i-1)//第i个元素之前停下,到达i-1个元素
{
p=p->next;
j++;
}
if (p||p->next!=NULL) //因为删除的是后面的元素,所以首先判断p不为空及不指向最后一个元素
{ Linklist q=new Lnode;
q=p->next->next;
p->next=q; //直接连上第i+1元素就ok
}
else cout<<"位置不合理";
}
int Find(Linklist &L,int i)
{
Linklist p=L;
int j=0;
while (p&&j<i)//到第i个元素停止,即所要查找的
{
p=p->next;
j++;
}
if (!p) cout<<"Error";
else cout<<"存在你要找的值为"<<i<<"的元素"<<'\n';
return p->data;
}
void Putout(Linklist &L)
{
Linklist p=L->next;
if(!p) cout<<"没有数据存入";
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<'\n';
}
void main()
{
Linklist K;
int i,x,y;
cout<<"请输入您要存储的元素个数:"<<'\n';
cin>>i;
CreateList(K,i);
Putout(K);
while(1)
{ cout<<"请输入您要进行的操作1插入2删除3查找4退出"<<'\n';
cin>>i;
if(i==1)
{
cout<<"请输入你要插入的位置x和要插入的元素y:"<<'\n';
cin>>x>>y;
Insert(K,x,y);
Putout(K);
continue;
}
if(i==2)
{
cout<<"请输入你要删除的元素位置x:"<<'\n';
cin>>x;
Delete(K,x);
Putout(K);
continue;
}
if(i==3)
{cout<<"请输入你要查找的元素:"<<'\n';
cin>>x;
Find(K,x);
Putout(K);
continue;}
if(i==4) break;
else
{cout<<"你的输入有误"<<'\n';
continue;}
}
}
建立一个单链表,并实现插入、删除、查找操作。/验证实验/
于 2018-06-25 09:06:29 首次发布