#include<stdio.h>
#include<malloc.h>
#include<string.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\n");
printf("请选择(1~7): ");
}
void new(int n)/*创建新链表,参数n为链表长度*/
{
int i;
printf("\n");
if((head=(create *)malloc(sizeof(create)))==NULL)/*定义头接点*/
{
printf("\n不能创建链表");
exit(1);
}
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 print()/*显示链表函数*/
{
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);
}
stpcpy(cur->name,insert_name);
cur->next=insert_point->next;
insert_point->next=cur;
}
void delete(create *delete_point)/*删除接点函数*/
{
van->next=delete_point->next;
free(delete_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;
}
main()
{
int select,length;
char tempname[10];
head=NULL;
while(1)
{
clrscr();
menu();
scanf("%d",&select);
switch(select)
{
case 1:
printf("\n请输入你要建立的链表的长度: ");
scanf("%d",&length);
new(length);
printf("\n链表已创建,按任意键返回\n");
getch();
break;
case 2:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回 \n");
getch();
break;
}
printf("\n以下为链表中原有元素: ");
print();
printf("\n请输入你要在哪个名字后面插入新名字: ");
scanf("%s",&tempname);
temp=research(tempname);
if((temp=research(tempname))==NULL)
{
printf("\n没有找到你要输入的名字,按任意键返回\n");
getch();
}
else
{
printf("\n请输入你要插入的名字: ");
scanf("%s",&tempname);
insert(temp,tempname);
printf("\n插入成功,以下为插入后的链表: ");
print();
printf("\n按任意键返回\n");
getch();
}
break;
case 3:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回 \n");
getch();
break;
}
printf("\n以下为链表中原有元素: ");
print();
printf("\n请输入你要删除的名字: ");
scanf("%s",&tempname);
temp=research(tempname);
if((temp=research(tempname))==NULL)
{
printf("\n没有找到你要删除的名字,按任意键返回\n");
getch();
}
else
{
delete(temp);
printf("\n删除成功,以下为删除后的链表: ");
print();
printf("\n按任意键返回\n");
getch();
}
break;
case 4:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回 \n");
getch();
break;
}
printf("\n输入你要查找的名字: ");
scanf("%s",&tempname);
if((temp=research(tempname))==NULL)
{
printf("\n没有找到你要找的名字,按任意键返回\n");
getch();
}
else
{
printf("\n找到你要找的名字: %s",temp->name);
printf("\n\n按任意键返回\n");
getch();
}
break;
case 5:
printf("\n以下为原链表:");
print();
printf("\n\n以下为倒置后的链表:");
turnlist();
print();
printf("\n\n倒置成功,按任意键返回\n");
getch();
break;
case 6:
if(head==NULL)
{
printf("\n请先建立链表,按任意键返回 \n");
getch();
break;
}
printf("\n以下为你链表中的所有元素: ");
print();
printf("\n\n按任意键返回");
printf("\n");
getch();
break;
case 7:
printf("\n谢谢使用,按任意键退出");
getch();
exit(0);
break;
default:
printf("\n输入错误,请重新选择,按任意键返回\n");
getch();
clrscr();
}
}
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |