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