建立一个单链表,并实现插入、删除、查找操作。/验证实验/

#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;}
}
}








 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿你温暖喜悦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值