链表的结点插入,删除等操作

#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
typedef int ElemType;

typedef struct LNode {
ElemType date;
struct LNode *next;
}*link;
link InitList()
{
 link L=(link)malloc(sizeof(LNode));
 if(!L)
 {
  cout<<"内存分配错误!"; 
  exit(1);
 }
L->next=NULL;
L->date=-1;
printf("链表已经建立/n按任意键进入主菜单");
getch();
 return L;
}


void ListInsert(link L,int i,ElemType e)
{

    link p=L,q;
    int j=0;
    if(!(p->next)&&i>1)
 {
       printf("所输入位置大于表长/n操作失败,按任意键返回");
    getch();
    return;
    }
  while(p&&j<i-1)
  {
     p=p->next;++j;
  }
   if(!p||j>i-1)
   {
       printf("所输入位置大于表长/n操作失败,按任意键返回");
    getch();
    return;
   }
q= (link)malloc(sizeof(LNode));
   if(!q){ 
   cout<<"内存分配错误!";
   return;
   }
q->date=e;
q->next=p->next; //插入L中;
p->next=q;
printf("结点已经插入/n按任意键返回!");
getch();


}
 void  ListDelete_L(link L,int i)
 {
    link p=L,q;
 int j=0;
 while(p&&j<i-1)
 {
  p=p->next;
  j++;
 }
    if(!p||j>i-1||!(L->next)||!(p->next))
 {
    printf("被删去数据位置不正确!操作失败,按任意键返回!");
    getch();
    return;
 }
 q=p->next;
 p->next=q->next;
 free(q);
 printf("结点已经删除/n按任意键返回!");
getch();
 }

 void show(link L)
 {
    link p=L;
 while(p->next!=NULL)
 {
  cout<<p->next->date<<endl;
  p=p->next;
 }
   printf("/n按任意键返回!");
    getch();
 }

 

 void main()
 {
  link L=InitList();
  char ch;
  int t,i;
  lable1: 
  system("cls");
  printf("按1插入结点/n按2删除结点/n按3显示数据/n按其它任意键退出/n");
  ch=getch();
  switch(ch)
  {
  case '1':
   cout<<"插入结点"<<endl;
   cout<<"输入要插入的数据"<<endl;
         cin>>t;
   cout<<"/n输入要插入的位置 ";
   cin>>i;
         ListInsert(L,i,t) ;
   goto   lable1;
  case '2':
   cout<<"删除结点"<<endl;
   cout<<"输入要删除结点的位置"<<endl;
         cin>>i;
         ListDelete_L(L,i);
      goto lable1;
  
  case '3':
   cout<<"/n输出数据"<<endl;
   show(L);
         goto lable1;
 
  default :
   exit(0);

        
  }

 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值