c语言的一个简单的链表

此程序为作业题:

但不忍丢弃成果;

所以记一下:

哦,对了,有一个易错点:在链表里,字符要用字符数组,不能用单个字符。

#include<stdio.h>
#include<stdio.h>
struct menu * head;
int n=0;
struct menu
{
 char name[10];
 int no;
 struct menu* next;
 }; 
 void add()
 {
  struct menu* p1,*p2;
  p1=p2=(struct menu*)malloc(sizeof(struct menu));
  head->next=p1;
  printf("按(0,0)结束\n");
  printf("请输入菜名和价格\n");
  scanf("%s%d",p2->name,&p2->no);
  while(p2->no!=0)
  {
  n=n+1;
  p1->next=p2;
  p1=p2;
  p2=(struct menu*)malloc(sizeof(struct menu));
  scanf("%s%d",p2->name,&p2->no);
  }
  p1->next=NULL;
 }
 void print()
 {
  struct menu* p1;
  p1=head->next;
  while(p1!=NULL)
  {
   printf("%s\t%d\n",p1->name,p1->no);
   p1=p1->next;
  }
 }
 void cha_ru()
 {
  int i,a;
 struct menu *p1,*p2; 
 p1=p2=(struct menu *)malloc(sizeof(struct menu));
 p1=head;
 printf("请输入你要插入的节点前的位置");
 scanf("%d",&a);
 for(i=0;i<a-1;i++)
 p1=p1->next;
 scanf("%s%d",p2->name,&p2->no);
 p2->next=p1->next;
 p1->next=p2;
}
void shanchu()
{
 int i,a;
 struct menu *p1;
 p1=(struct menu *)malloc(sizeof(struct menu));
 p1=head;
 printf("请输入你要删除的位置\n");
 scanf("%d",&a);
 for(i=0;i<a-1;i++) 
 p1=p1->next;
 p1->next=p1->next->next;
}
 int main()
 {
  int a=0;
   head=(struct menu*)malloc(sizeof(struct menu));
  head->next=NULL;
  printf("请输入你要的功能\n");
  printf("输入按1\n输出按2\n删除按3\n插入按4\n");
  while(1)
{
   scanf("%d",&a);
   switch(a)
   {
    case 1:add();break;
    case 2:print();break;
    case 3:shanchu();break;
    case 4:cha_ru();break;
   }
   if(a==' ')
   break;
    printf("请继续你要的功能\n");
  }

永不止步步 发表于12-27 13:41 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308217个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号