#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
typedef struct node
{
char name[20];//姓名
char num[20];//学号
char sex;//性别
struct node *next;
}slink;
void deletef(slink *head);//删除操作
void insert(slink *head);//插入操作
void seek(slink *head);//查找操作
void print(slink *head);//打印操作
int main()//主程序
{
int choose;
slink *head=(slink *)malloc(sizeof(slink));
head->next=NULL;
printf("\t*****************用链表实现一些操作******************\n");
printf("\t* ---------1:插入操作 *\n");
printf("\t* ---------2:删除操作 *\n");
printf("\t* ---------3:查找操作 *\n");
printf("\t* ---------4:打印操作 *\n");
printf("\t* ---------5:退出 *\n");
printf("\t*****************************************************\n\n");
printf("\t ---------- made by beyond\n");
printf("请输入您的选择:\n");
scanf("%d",&choose);
getchar();
while(1)
{
if(choose<1||choose>5)
{
printf("输入错误!请重新输入:\n");
scanf("%d",&choose);
getchar();
}
else
switch(choose)
{
case 1:
insert(head);
printf("\n按任意键继续\n");
getchar();
system("cls");
break;
case 2:
deletef(head);
printf("\n按任意键继续\n");
getchar();
system("cls");
break;
case 3:
seek(head);
printf("\n按任意键继续\n");
getchar();
system("cls");
break;
case 4:
print(head);
printf("\n按任意键继续\n");
getchar();
system("cls");
break;
case 5:
{
printf("谢谢使用\n");
exit(0);
}
break;
}
printf("\t*****************用链表实现一些操作******************\n");
printf("\t* ---------1:插入操作 *\n");
printf("\t* ---------2:删除操作 *\n");
printf("\t* ---------3:查找操作 *\n");
printf("\t* ---------4:打印操作 *\n");
printf("\t* ---------5:退出 *\n");
printf("\t*****************************************************\n\n");
printf("\t ---------- made by beyond\n");
printf("请输入您的选择:\n");
scanf("%d",&choose);
getchar();
}
return 0;
}
void insert(slink *head)
{
slink *p,*q;
q=head;
while(q->next!=NULL)
q=q->next;
p=(slink *)malloc(sizeof(slink));
if(p)
{
printf("请输入姓名:\n");
gets(p->name);
printf("请输入学号:\n");
scanf("%s",&p->num);
getchar();
printf("请输入性别(w/m):\n");
scanf("%c",&p->sex);
getchar();
p->next=q->next;
q->next=p;
printf("插入成功!\n");
}
else
printf("插入失败!可能原因:内存已满。\n");
}
void deletef(slink *head)
{
slink *p,*q;
char str[20];
p=head->next;
q=head;
if(head->next==NULL)
printf("链表为空,无元素可删除。\n");
else
{
printf("请输入要删除人的姓名或者学号:\n");
gets(str);
while(p!=NULL)
{
if(strcmp(p->name,str)!=0&&strcmp(p->num,str)!=0)
{
q=p;
p=p->next;
}
else
break;
}
}
if(p==NULL)
printf("未找到要删除的结点\n");
else
{
q->next=p->next;
free(p);
printf("删除成功\n");
}
}
void seek(slink *head)
{
slink *p;
char str[20];
p=head->next;
if(p==NULL)
printf("链表为空,请先插入结点。\n");
else
{
printf("请输入要查找的人的姓名或者学号:\n");
gets(str);
while(strcmp(p->name,str)!=0&&strcmp(p->num,str)!=0)
p=p->next;
if(p==NULL)
printf("要查找的结点不存在。\n");
else
{
printf("所查找的信息为:\n");
printf("-------姓名-------性别-------学号------\n");
printf(" %s %c %s \n",p->name,p->sex,p->num);
}
}
}
void print(slink *head)
{
slink *p;
int count=0;
p=head->next;
if(p==NULL)
printf("链表为空\n");
else
{
printf("信息输出:\n");
printf("---------姓名----------性别---------学号----------\n");
while(p!=NULL)
{
printf(" %s %c %s\n",p->name,p->sex,p->num);
count++;
p=p->next;
}
printf("-----------总计:%d\n\n",count);
}
}
转载于:https://www.cnblogs.com/iLinuxC/archive/2012/03/28/2421060.html