在这里列举了一个应用单链表基本算法的综合程序,双向链表和循环链表的综合程序大家可以自己去试一试。53FLinux联盟 #include <stdio.h>53FLinux联盟 #include <malloc.h>53FLinux联盟 #include <string.h>53FLinux联盟 #define N 10 typedef struct node53FLinux联盟 {53FLinux联盟 char name[20];53FLinux联盟 struct node *link;53FLinux联盟 }stud;53FLinux联盟 stud * creat(int n)53FLinux联盟 {53FLinux联盟 stud *p,*h,*s;53FLinux联盟 int i;53FLinux联盟 if((h=(stud *)malloc(sizeof(stud)))==NULL)53FLinux联盟 {53FLinux联盟 printf("不能分配内存空间!");53FLinux联盟 exit(0);53FLinux联盟 }53FLinux联盟 h->name[0]='\0';53FLinux联盟 h->link=NULL;53FLinux联盟 p=h;53FLinux联盟 for(i=0;i<n;i++)53FLinux联盟 {53FLinux联盟 if((s= (stud *) malloc(sizeof(stud)))==NULL)53FLinux联盟 {53FLinux联盟 printf("不能分配内存空间!");53FLinux联盟 exit(0);53FLinux联盟 }53FLinux联盟 p->link=s;53FLinux联盟 printf("请输入第%d个人的姓名",i+1);53FLinux联盟 scanf("%s",s->name);53FLinux联盟 s->link=NULL;53FLinux联盟 p=s;53FLinux联盟 }53FLinux联盟 return(h);53FLinux联盟 }53FLinux联盟 stud * search(stud *h,char *x)53FLinux联盟 {53FLinux联盟 stud *p;53FLinux联盟 char *y;53FLinux联盟 p=h->link;53FLinux联盟 while(p!=NULL)53FLinux联盟 {53FLinux联盟 y=p->name;53FLinux联盟 if(strcmp(y,x)==0)53FLinux联盟 return(p);53FLinux联盟 else p=p->link;53FLinux联盟 }53FLinux联盟 if(p==NULL)53FLinux联盟 printf("没有查找到该数据!");53FLinux联盟 }53FLinux联盟 stud * search2(stud *h,char *x)53FLinux联盟 {53FLinux联盟 stud *p,*s;53FLinux联盟 char *y;53FLinux联盟 p=h->link;53FLinux联盟 s=h;53FLinux联盟 while(p!=NULL)53FLinux联盟 {53FLinux联盟 y=p->name;53FLinux联盟 if(strcmp(y,x)==0)53FLinux联盟 return(s);53FLinux联盟 else53FLinux联盟 {53FLinux联盟 p=p->link;53FLinux联盟 s=s->link;53FLinux联盟 }53FLinux联盟 }53FLinux联盟 if(p==NULL)53FLinux联盟 printf("没有查找到该数据!");53FLinux联盟 }53FLinux联盟 void insert(stud *p)53FLinux联盟 {53FLinux联盟 char stuname[20];53FLinux联盟 stud *s;53FLinux联盟 if((s= (stud *) malloc(sizeof(stud)))==NULL)53FLinux联盟 {53FLinux联盟 printf("不能分配内存空间!");53FLinux联盟 exit(0);53FLinux联盟 }53FLinux联盟 printf("\n请输入你要插入的人的姓名:");53FLinux联盟 scanf("%s",stuname);53FLinux联盟 strcpy(s->name,stuname);53FLinux联盟 s->link=p->link;53FLinux联盟 p->link=s;53FLinux联盟 }53FLinux联盟 void del(stud *x,stud *y)53FLinux联盟 {53FLinux联盟 stud *s;53FLinux联盟 s=y;53FLinux联盟 x->link=y->link;53FLinux联盟 free(s);53FLinux联盟 }53FLinux联盟 void print(stud *h)53FLinux联盟 {53FLinux联盟 stud *p;53FLinux联盟 p=h->link;53FLinux联盟 printf("数据信息为:\n");53FLinux联盟 while(p!=NULL)53FLinux联盟 {53FLinux联盟 printf("%s ",&*(p->name));53FLinux联盟 p=p->link;53FLinux联盟 }53FLinux联盟 }53FLinux联盟 void quit()53FLinux联盟 {53FLinux联盟 exit(0);53FLinux联盟 }53FLinux联盟 void menu(void)53FLinux联盟 {53FLinux联盟 clrscr();53FLinux联盟 printf("\t\t\t单链表C语言实现实例\n");53FLinux联盟 printf("\t\t|————————————————|\n");53FLinux联盟 printf("\t\t| |\n");53FLinux联盟 printf("\t\t| [1] 建 立 新 表 |\n");53FLinux联盟 printf("\t\t| [2] 查 找 数 据 |\n");53FLinux联盟 printf("\t\t| [3] 插 入 数 据 |\n");53FLinux联盟 printf("\t\t| [4] 删 除 数 据 |\n");53FLinux联盟 printf("\t\t| [5] 打 印 数 据 |\n");53FLinux联盟 printf("\t\t| [6] 退 出 |\n");53FLinux联盟 printf("\t\t| |\n");53FLinux联盟 printf("\t\t| 如未建立新表,请先建立! |\n");53FLinux联盟 printf("\t\t| |\n");53FLinux联盟 printf("\t\t|————————————————|\n");53FLinux联盟 printf("\t\t 请输入你的选项(1-6):");53FLinux联盟 }53FLinux联盟 main()53FLinux联盟 {53FLinux联盟 int choose;53FLinux联盟 stud *head,*searchpoint,*forepoint;53FLinux联盟 char fullname[20];53FLinux联盟 53FLinux联盟 while(1)53FLinux联盟 {53FLinux联盟 menu();53FLinux联盟 scanf("%d",&choose);53FLinux联盟 switch(choose)53FLinux联盟 {53FLinux联盟 case 1:head=creat(N);53FLinux联盟 break;53FLinux联盟 case 2:printf("输入你所要查找的人的姓名:");53FLinux联盟 scanf("%s",fullname);53FLinux联盟 searchpoint=search(head,fullname);53FLinux联盟 printf("你所查找的人的姓名为:%s",*&searchpoint->name);53FLinux联盟 printf("\n按回车键回到主菜单。");53FLinux联盟 getchar();getchar();53FLinux联盟 break;53FLinux联盟 case 3: printf("输入你要在哪个人后面插入:");53FLinux联盟 scanf("%s",fullname);53FLinux联盟 searchpoint=search(head,fullname);53FLinux联盟 printf("你所查找的人的姓名为:%s",*&searchpoint->name);53FLinux联盟 insert(searchpoint);53FLinux联盟 print(head);53FLinux联盟 printf("\n按回车键回到主菜单。");53FLinux联盟 getchar();getchar();53FLinux联盟 break;53FLinux联盟 case 4:print(head);53FLinux联盟 printf("\n输入你所要删除的人的姓名:");53FLinux联盟 scanf("%s",fullname);53FLinux联盟 searchpoint=search(head,fullname);53FLinux联盟 forepoint=search2(head,fullname);53FLinux联盟 del(forepoint,searchpoint);53FLinux联盟 break;53FLinux联盟 case 5:print(head);53FLinux联盟 printf("\n按回车键回到主菜单。");53FLinux联盟 getchar();getchar();53FLinux联盟 break;53FLinux联盟 case 6:quit();53FLinux联盟 break;53FLinux联盟 default:printf("你输入了非法字符!按回车键回到主菜单。");53FLinux联盟 clrscr();53FLinux联盟 menu();53FLinux联盟 getchar();53FLinux联盟 }53FLinux联盟 }53FLinux联盟 }53FLinux联盟 (完) 53FLinux联盟 53FLinux联盟
|