一个链表应用的综合性程序,在此程序中首先定义一个结构体,它有两个成员,一个事描述一个人的姓名,而是指向结构体本身的指针,要求实现以下功能:
1)创建新链表
2)在链表中插入元素
3)在链表中删除元素
4)在链表中查找元素
5)倒置链表
#include
#include
#include "malloc.h"
typedef struct elem/*定义结点*/
{
char name[10];
struct elem *next;
}create;
create *head,*van,*cur,*temp;
/*定义头结点head,前驱结点van,当前结点cur,临时结点temp*/
void menu()/*创建菜单*/
{
printf("\t\t\t1.创建新链表----[1]\n");
printf("\t\t\t2.插入新元素----[2]\n");
printf("\t\t\t3.删除旧元素----[3]\n");
printf("\t\t\t4.查找旧元素----[4]\n");
printf("\t\t\t5.倒置原链表----[5]\n");
printf("\t\t\t6.显示所有元素--[6]\n");
printf("\t\t\t7.退出----------[7]\n");
printf("请选择1-7:");
}
void news(int n)/*创建新链表,参数n为链表长度*/
{
int i;
printf("\n");
if((head=(create *)malloc(sizeof(create)))==NULL)/*定义头结点*/
{
printf("\n不能创建链表");
exit(0);
}
van=head;/*将前驱结点指针指向头结点*/
for(i=1;i<=n;i++)
{
if((cur=(create *)malloc(sizeof(create)))==NULL)/*定义新结点*/
{
printf("\n不能创建链表");
exit(1);
}
cur->next=NULL;/*将当前结点的后续指针置空*/
van->next=cur;/*连接结点*/
printf("输入第%d个人的名字:",i);
scanf("%s",&cur->name);/*输入当前结点的数据域内容*/
van=cur;
}
}
/*查找函数*/
create *research(char searchname[10])/*查找结点函数*/
{
van=head;
temp=head->next;
while(temp!=NULL)
{
if(strcmp(temp->name,searchname)==0)
{
return(temp);
}
else
{
van=temp;
temp=temp->next;
}
}
return(temp);
}
/*显示链表函数*/
void printf()/*显示链表函数*/
{
temp=head->next;
printf("\n");
while(temp!=NULL)
{
printf("%s ",temp->name);
temp=temp->next;
}
}
/*插入结点*/
void insert(create *insert_point,char insert_name[10])/*插入结点函数*/
{
if((cur=(create *)malloc(sizeof(create)))==NULL)
{
printf("\n不能创建链表");
exit(1);
}
strcpy(cur->name,insert_name);
cur->next=insert_point->next;
insert_point->next=cur;
}
/*删除结点*/
void deleted(create *deleted_point)
{
van->next=deleted_point->next;
free(deleted_point);
}
/*倒置链表*/
int turnlist()/*倒置链表函数*/
{
van=head->next;
cur=van->next;
van->next=NULL;
while(cur!=NULL)
{
temp=cur->next;
cur->next=van;
van=cur;
cur=temp;
}
head->next=van;
}
/*主函数*/
int main()
{
int select,length;
char tempname[10];
head=NULL;
while(1)
{
menu();
scanf("%d",&select);
switch(select)
{
case 1:
printf("\n请输入你要建立的链表的长度");
scanf("%d",&length);
news(length);
printf("\n链表已创建,按任意键返回\n");
break;
case 2:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回\n");
break;
}
printf("\n以下为链表中原有元素:");
printf();
printf("\n请输入你要在那个名字后面插入新名字");
scanf("%s",&tempname);
temp=research(tempname);
if((temp=research(tempname))==NULL)
{
printf("\n没有找到你输入的名字,按任意键返回\n");
}
else
{
printf("\n请输入你要插入的名字:");
scanf("%s",&tempname);
insert(temp,tempname);
printf("\n插入成功,以下为插入后的链表");
printf();
printf("\按任意键返回\n");
}
break;
case 3:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回\n");
break;
}
printf("\n以下为链表中原有元素:");
printf();
printf("\n请输入你要删除的名字:");
scanf("%s",&tempname);
temp=research(tempname);
if((temp=research(tempname))==NULL)
{
printf("\n没有找到你要删除的名字,按任意键返回\n");
}
else
{
deleted(temp);
printf("\n删除成功,以下为删除后的链表:");
printf();
printf("\n按任意键返回\n");
}
break;
case 4:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回\n");
break;
}
printf("\n输入要查找的名字:");
scanf("%s",&tempname);
if((temp=research(tempname))==NULL)
{
printf("\n没有找你要找的名字,按任意键返回\n");
}
else
{
printf("\n找到你要找的名字:%s",temp->name);
printf("\n\n按任意键返回");
}
break;
case 5:
printf("\n以下是原链表:");
printf();
printf("\n\n以下为倒置后的链表:");
turnlist();
printf();
printf("\n\n倒置成功,按任意键返回\n");
break;
case 6:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回");
break;
}
printf("\n以下为你链表中的所有元素:");
printf();
printf("\n\n按任意键返回");
printf("\n");
break;
case 7:
printf("\n按任意键返回");
exit(0);
break;
default:
printf("\n输入错误,请重新选择,按任意键返回\n");
}
}
return 0;
}
C:\>12.5.exe
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:1
请输入你要建立的链表的长度2
输入第1个人的名字:aa
输入第2个人的名字:bb
链表已创建,按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:2
以下为链表中原有元素:
aa bb
请输入你要在那个名字后面插入新名字aa
请输入你要插入的名字:cc
插入成功,以下为插入后的链表
aa cc bb 按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:3
以下为链表中原有元素:
aa cc bb
请输入你要删除的名字:bb
删除成功,以下为删除后的链表:
aa cc
按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:4
输入要查找的名字:aa
C:\>12.5.exe
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:1
请输入你要建立的链表的长度2
输入第1个人的名字:aa
输入第2个人的名字:bb
链表已创建,按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:2
以下为链表中原有元素:
aa bb
请输入你要在那个名字后面插入新名字bb
请输入你要插入的名字:cc
插入成功,以下为插入后的链表
aa bb cc 按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:3
以下为链表中原有元素:
aa bb cc
请输入你要删除的名字:bb
删除成功,以下为删除后的链表:
aa cc
按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:4
输入要查找的名字:aa
找到你要找的名字:aa
按任意键返回 1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:5
以下是原链表:
aa cc
以下为倒置后的链表:
cc aa
倒置成功,按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
请选择1-7:6
以下为你链表中的所有元素:
cc aa
按任意键返回
1.创建新链表----[1]
2.插入新元素----[2]
3.删除旧元素----[3]
4.查找旧元素----[4]
5.倒置原链表----[5]
6.显示所有元素--[6]
7.退出----------[7]
阅读(1386) | 评论(0) | 转发(0) |