单链表
关于单链表的增删查改基本功能的代码实现(c语言)
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct List{
char menu[20];//菜名
int charge;//价格
struct List *next;
}List1;
List1 *L;
void AddList(List1 *L){
int n;
List1 *p1,*p2;
p1=(List1 *)malloc(sizeof(List1));
if(p1!=NULL)
{
L->next=p1;
while(1)
{
printf("\t请输入想要添加菜名:");
scanf("%s",p1->menu);
printf("\t请输入此菜品的价格:");
scanf("%d",&p1->charge);
p2=p1;
p1=(List1 *)malloc(sizeof(List1));
if(p1!=NULL)
p2->next=p1;
printf("\n请选择是否继续输入:1.继续 2.退出\n请选择:");
scanf("%d",&n);
if(n==1)
continue;
else
{
printf("\t输入成功\n");
p2->next=NULL;
free(p1);
break;
}
}
}
}
void GetList(List1 *L){
char menu[20];
List1 *p1,*p2;
int n;
p1=L->next;
printf("请输入\n1.查看全部菜单\n2.查找单个菜名\n");
scanf("%d",&n);
if(n==1){
if(p1==NULL) printf("\t菜单为空\n");
while(p1!=NULL){
printf("菜名:%s\t价格:%d\n",p1->menu,p1->charge);
p1=p1->next;
}
}
else{
printf("请输入要查找的菜名");
scanf("%s",menu);
while(p1!=NULL){
if(!strcmp(p1->menu,menu)){
printf("菜名:%s",p1->menu);
printf("价格:%d\n",p1->charge);
break;
}
p1=p1->next;
}
if(p1==NULL) printf("\t查无此菜\n");
}
}
void ListDelete(List1 *L){
char menu[20];
List1 *p1,*p2;
int num=0;
printf("请输入要删除的菜名:");
scanf("%s",menu);
p1=L;
p2=p1->next;
if(p2==NULL) printf("\t菜单为空\n");
else{
while(p1!=NULL){
if(strcmp(p2->menu,menu)==0){
p1->next=p2->next;
num=1;
free(p2);
printf("\t删除成功\n");
break;
}
p2=p2->next;
p1=p1->next;
if(p2==NULL){
printf("\t查无此菜\n");
break;
}
}
}
//if(num==0) printf("\t查无此菜\n");