自己用C写的单链表

用C语言写的,C只是我的入门语言,没怎么深学。写的这个我感觉烦琐的要命,不要笑我啊:(

#include<malloc.h>
#include<stdio.h>
int N=0;
typedef struct node{
 int x;
 struct node *next;
}member;

struct node *Creat() //创建单链表
{
 struct node *h,*s,*p;
 int i;
 if((h=(member *)malloc(sizeof(member)))==NULL)
 {
  printf("不能分配内存空间");
  exit(0);
 }
 h->x=0;
 h->next=NULL;
 p=h;
 for(i=1;i<10;i++)
 {
  N++;
  if((s=(member *)malloc(sizeof(member)))==NULL)
  {
   printf("不能分配内存空间");
   exit(0);
  }
  p->next=s;
  s->x=i;
  s->next=NULL;
  p=s;
 }
 return(h);
}
view(struct node *head) //读取链表的内容
{
 struct node *p;
 p=head;
 while(p->next!=NULL)
 {
  printf("%d/t",p->x);
  p=p->next;
 }
 printf("%d/n",p->x);
}
insert(struct node *head,int num) //插入节点
{
 int t=1;
 struct node *p1,*p2;
 p1=head;
 
 while(t<num-1)
 {
  p1=p1->next;
  t++;
 }
 p2=(member *)malloc(sizeof(struct node));
 printf("请输入插入节点的数域(int型)");
 scanf("%d",&p2->x);
 p2->next=p1->next;
 p1->next=p2;
 N++;
}
del(struct node *head,int num) //删除所选节点
{
 int t=1;
 struct node *p1,*p2;
 p1=head;
 while(t<num-1)
 {
  p1=p1->next;
  t++;
 }
 p2=p1->next->next;
 free(p1->next);
 p1->next=p2;
 N--;
}
int select(struct node *head,int b) //查找元素数据域

 int y;
 struct node *p1;
 
 for(p1=head;p1->next!=NULL;p1=p1->next)
 {
  if((p1->x)==b)
  {
   return(0);
  }
 }
 if((p1->x)==b)
 {
  return(0);
 }
}


void main()
{
 int a,num;
 member *head;
 head=Creat();
go:
 printf("含有%d个元素的单链表已经创建完毕./n请选择:1.查看链表各数据域  2.插入节点  3.删除指定节点  4.查询数据域  5.退出/t",N+1);
 scanf("%d",&a);
 switch(a)
 {
  case 1:
   view(head);
   goto go;
   break;
  case 2:
   printf("要再第几个节点出插入新节点?");
   scanf("%d",&num);
   if(num>N+1||num<1)
   {
    printf("请在1到%d中选择/n",N+1);
    goto go;
   }
   insert(head,num);
   goto go;
   break;

  case 3:
   printf("要删除第几个节点?");
   scanf("%d",&num);
   if(num>N+1||num<1)
   {
    printf("请在1到%d中选择/n",N+1);
    goto go;
   }
   del(head,num);
   goto go;
   break;
  case 4:
   printf("输入查询的关键字(int型)?");
   scanf("%d",&num);
   if(select(head,num)==0)
   {
    printf("OK/n");
   }
   else
   {
    printf("ERROR/n");
   }
   goto go;
  case 5:
   break;
  default:
   printf("请正确选择");
   goto go;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值