您的位置:首页 > 编程语言 > C语言/C++

C语言之单链表应用举例

2015-09-10 20:08 507 查看
在这里列举了一个应用单链表基本算法的综合程序,双向链表和循环链表的综合程序大家可以自己去试一试。

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

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: