单向链表的增删改查

#include<stdio.h>
#include<stdlib.h>
typedef struct lian{
 int date;
 struct lian*netx;
}list;
 int main()
 {
  list *head,*p,*q;
  head=(list*)malloc(sizeof(list));
  head->netx=NULL;
  q=head;
  //输入 
  //输入采用尾插法
   printf("输入链表内的数\n");
  printf("输入完毕输入-1\n");
  do
  {
   p=(list*)malloc(sizeof(list));
   scanf("%d",&p->date);
   q->netx=p;
   q=p;
   q->netx=NULL;
 }while(q->date!=-1);//输入时将链表的最后一位置为-1
 //输出 
 for(q=head->netx;q!=NULL;q=q->netx)
 {
  printf("%d ",q->date);
 }printf("\n");
 //插入
  printf("输入插入链表内的数\n");
  printf("插入完毕输入-1\n");
 q=(list*)malloc(sizeof(list));
 scanf("%d",&q->date);
 while(q->date!=-1)
 {
  for(p=head;p->netx->date!=-1;p=p->netx)
  {
   if(q->date<p->netx->date)
   {
    q->netx=p->netx;
    p->netx=q;
    break; 
   }
  }
  if(p->netx->date==-1)
  {
   q->netx=p->netx;
   p->netx=q; 
  }
  q=(list*)malloc(sizeof(list));
  scanf("%d",&q->date);
 } free(q);
  //输出 
 for(q=head->netx;q!=NULL;q=q->netx)
 {
  printf("%d ",q->date);
 }printf("\n");
 //查找
  printf("输入要查找的数\n");
  printf("查找完毕输入-1\n");
  int i,flag,n,j;
  scanf("%d",&i);
  while(i!=-1)
  {
   flag=1;
   for(p=head->netx;p->date!=-1;p=p->netx)
   {
    if(i==p->date)
    {
    printf("yes\n");
    flag=0;
    break;
    }
   }if(flag)
   {
    printf("no\n");
   }
   scanf("%d",&i);
   }  
 //删除
 printf("输入要删除的数\n");
 printf("删除完毕输入-1\n"); 
 do
 {
  scanf("%d",&i);
  for(p=head;p->netx!=NULL;p=p->netx)
  {
   if(p->netx->date==i)
   {
    q=p->netx;
    p->netx=p->netx->netx;
    free(q);
    break; 
   }
  }
  }while(i!=-1);//此时将链表的最后一位-1删掉
   //输出 
 for(q=head->netx;q!=NULL;q=q->netx)
 {
  printf("%d ",q->date);
 }printf("\n"); 
 //更改
 printf("输入要更改的数以及更改后的数\n");
 printf("更改完毕输入-1\n");
 scanf("%d",&i);
 while(i!=-1)
 {
  scanf("%d",&n);
  for(p=head->netx;p!=NULL;p=p->netx)
  {
   if(p->date==i)
   {
    p->date=n;
   }
  }
  scanf("%d",&i);
 }
 //输出 
 for(q=head->netx;q!=NULL;q=q->netx)
 {
  printf("%d ",q->date);
 }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值