| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

链表的c语言实现(十)

时间:2006-07-08 01:04:35  来源:编程中国  作者:Linux联盟收集
在这里列举了一个应用单链表基本算法的综合程序,双向链表和循环链表的综合程序大家可以自己去试一试。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联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门