Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631778
  • 博文数量: 151
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1664
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-13 16:37
文章分类

全部博文(151)

文章存档

2010年(16)

2009年(135)

我的朋友

分类: C/C++

2009-08-27 11:47:02

一个链表应用的综合性程序,在此程序中首先定义一个结构体,它有两个成员,一个事描述一个人的姓名,而是指向结构体本身的指针,要求实现以下功能:
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) |
0

上一篇:LinuxC_链表的插入

下一篇:Ivsadm命令实例

给主人留下些什么吧!~~