链表的c语言实现(十)

王朝c/c++·作者佚名  2008-06-01
宽屏版  字体: |||超大  

在这里列举了一个应用单链表基本算法的综合程序,双向链表和循环链表的综合程序大家可以自己去试一试。

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#define N 10

typedef 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();

}

}

}

(完)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有