#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<unistd.h>
#define LEN sizeof(STU) //宏定义
typedef struct student //定义链表
{
int ID;
char name[32];
struct student *next;
}STU;
//添加节点
STU* add_node(STU* head)
{
STU* temp=(STU*)malloc(LEN);
printf("input ID:");
scanf("%d",&temp->ID);
printf("input name:");
scanf("%s",temp->name);
temp->next=NULL;
temp->next=head->next;
//将temp所指向的空间添加到链表上
head->next=temp;
temp=NULL;
return head;
}
//遍历程序输出
void show_link(STU *head)
{
if (NULL==head->next)
{
printf("链表为空");
return;
}else{
STU *p=head->next;
printf("\tID\tname\n");
while(p!=NULL)
{
printf("\t%d\t%s\n",p->ID,p->name);
p=p->next;
}
}
return ;
}
//创建头结点
STU *create_link(STU *head)
{//若分配空间失败,则返回NULL
head=(STU *)malloc(LEN);
//判断节点是否分配空间成功
if(NULL==head)
{
//重新分配空间
head=(STU *)malloc(LEN);
return head;
}
//将头结点返回
printf("创建链表成功!!!\n");
sleep(2);
return head;
}
//头删程序
STU *delete_head(STU *head)
{
if(NULL==head->next)
{
printf("\t链表为空,无数据可删\n");
sleep(5);
return head ;
}
//定义temp指针指向链表的第一个节点
STU *temp=head->next;
//头删开始
head->next=temp->next;
free(temp);
temp=NULL;
return head;
}
//修改节点值
STU* modify_node(STU *head)
{
char name[32];
printf("请输入要修改的名:");
scanf("%s",name);
STU *p=head->next;
for(;p!=NULL;p=p->next)
{
//比较用户名是否存在,若存在则为要修改的节点
if(strcmp(name,p->name)==0)
{
printf("\t该用户的信息为:\n");
printf("name:%s\nID:%d\n",p->name,p->ID);
printf("请输入修改后的信息:");
scanf("%d",&p->ID);
return head;
}
}
if(p==NULL)
printf("没有该用户\n");
return head;
}
//查找节点值
void find_node(STU *head)
{
char name[32];
printf("请输入要查找的名:");
scanf("%s",name);
STU *p=head->next;
for(;p!=NULL;p=p->next)
{
//比较用户名是否存在
if(strcmp(name,p->name)==0)
{
printf("\t该用户的信息为:\n");
printf("name:%s\nID:%d\n",p->name,p->ID);
return ;
}
}
if(p==NULL)
printf("没有该用户\n");
return ;
}
//选择菜单
void menu()
{
//定义头节点
STU *head=NULL;
int choice;
while(1)
{
system("clear");//清屏
printf("\t\t1.创建链表\n");
printf("\t\t2.添加节点\n");
printf("\t\t3.删除节点\n");
printf("\t\t4.修改节点值\n");
printf("\t\t5.查找节点\n");
printf("\t\t6.查看链表\n");
printf("\t\t0.退出\n");
printf("\t请选择\n:");
scanf("%d",&choice);
switch(choice)
{
case 1:
head=create_link(head);
printf("创建成功\n");
break;
case 2:
{
int i=0;
for(i=0;i<5;i++)//默认5个
head=add_node(head);
printf("添加成功\n");
break;
}
case 3:
{
head=delete_head(head);
break;
}
case 4:
head=modify_node(head);
break;
case 5:
find_node(head);
sleep(5);
break;
case 6:
{
show_link(head);
sleep(6);
break;
}
case 0:
{exit(1);//退出程序
break;}
default:
{printf("\t请重新选择!!\n");
sleep(2);//停顿两秒
break;
}
}
}
return ;
}
int main()
{//创建头节点
int i;
STU *head=(STU*)malloc(sizeof(STU));
head->next=NULL;
//添加节点
//for(i=0;i<3;i++)
//head=add_node(head);
//遍历链表
//show_link(head);
//调用操作菜单:menu()
menu();
return 0;
}
链表(20161221)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 实现方式有二:1、常规方法: (1)遍历一遍单链表,计算单链表的长度L (2)计算中间节点j为L/2,(或者当L为...
- 联合体 联合体:多个成员变量公用同一块空间,一个时间段只能用其中的一个成员.如果成员变量都是基本数据类型,那么这个...