单链表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择。
1、创建单链表。
2、录入学生信息。
3、删除一个学生信息。
4、按照成绩修改一个学生的年龄。
5、按照姓名顺序查找一个学生是否存在。
主函数:
#include "zy.h"
int main(int argc, const char *argv[])
{
Plink L;
stu student[20];
int i;
int key;
while(1)
{
printf("*********1.创建顺序表************\n");
printf("*********2.录入信息**************\n");
printf("*********3.插入学生信息**********\n");
printf("*********4.删除学生信息**********\n");
printf("*********5.按位置修改学生信息****\n");
printf("*********6.查找学生**************\n");
printf("*********7.按成绩排序************\n");
printf("输入序号:");
scanf("%d",&key);
switch(key)
{
case 1:
L=get_h(); //1.申请堆区空间返回地址
break;
case 2:
{
input(student,5);
//尾插法
for(i=0;i<5;i++)
{
tail_insert(L,student[i]);
}
node_output(L);
break;
}
case 3:
{
int pos;
stu e;
printf("输入要插入的位置:");
scanf("%d",&pos);
printf("输入要插入的姓名、年龄、分数:\n");
scanf("%s%d%d",e.name,&e.age,&e.score);
insert_any_pos(L,pos,e);
node_output(L);
break;
}
case 4:
{
int pos_1;
printf("输入要删除的位置:");
scanf("%d",&pos_1);
dele_any_pos(L,pos_1);
node_output(L);
break;
}
case 5:
{
int fen;
printf("请输入要查找的分数");
scanf("%d",&fen);
value_find_change(L,fen);
break;
}
case 6:
{
find_name(L);
break;
}
}
}
return 0;
}
zy.h
#ifndef __ZY_H__
#define __ZY_H__
#include<myhead.h>
typedef struct
{
char name[20];
int age;
int score;
}stu;
typedef struct node
{
union //联合体,每次使用联合体中的一个数据
{
int len;//头节点,链表长度
stu data;
};
struct node *next;//节点指针域,存储下一节点地址
}Link,*Plink;
Plink get_h();
int input(stu s[],int n);
int node_output(Plink L);
int tail_insert(Plink L,stu e);
int insert_any_pos(Plink L,int pos,stu e);
int dele_any_pos(Plink L,int pos);
int value_find_change(Plink L,int key);
int find_name(Plink L);
#endif
zy.c
#include"zy.h"
Plink get_h()
{
Plink p=malloc(sizeof(Link));
if(p==NULL)
{
printf("申请头结点失败\n");
return NULL;
}
p->len=0;
p->next=NULL;
return p;
}
int input(stu s[],int n)
{
int i;
printf("请输入学生信息:\n");
for(i = 0;i<n;i++)
{
printf("请输入第%d个学生的姓名、年龄、分数:",i+1);
scanf("%s%d%d",s[i].name,&s[i].age,&s[i].score);
printf("\n");
}
return 0;
}
int node_output(Plink L)
{
if(L==NULL || L->len==0)
{
printf("单链表不存在\n");
return -1;
}
int i;
Plink t=L;//指向头指针
for(i=0;i<L->len;i++)
{
t=t->next;
printf("%s\t%d\t%d\t",t->data.name,t->data.age,t->data.score);
printf("\n");
}
return 0;
}
int tail_insert(Plink L,stu e)
{
int i;
if(L==NULL)
{
printf("单链表不存在\n");
return -1;
}
//尾插法
Plink t=L;
for(i=0;i<L->len;i++)
{
t=t->next;//将t指向最后一个节点
}
Plink p=malloc(sizeof(Link));
p->data=e;
t->next=p;
p->next=NULL;
L->len++;
return 0;
}
int insert_any_pos(Plink L,int pos,stu e)
{
int i;
Plink t=L;
for(i=1;i<pos;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data=e;
p->next=t->next;
t->next=p;
L->len++;
}
int dele_any_pos(Plink L,int pos)
{
int i;
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink Q=t->next;
t->next=t->next->next;
L->len--;
free(Q);
Q=NULL;
}
int value_find_change(Plink L,int key)
{
if(L==NULL || L->len==0)
{
printf("单链表不存在或者为空\n");
return -1;
}
Plink t = L;
int i,e,pos=-1;
for(i = 0;i<L->len;i++)
{
t = t->next;
if(key==t->data.score)
{
pos=i+1;//保留节点位置
printf("查找成功,请输入要修改的年龄:");
scanf("%d",&e);
t->data.age = e;//修改
break;
}
}
if(pos==-1)
{
printf("不存在该节点值\n");
return -1;
}
return 0;
}
int find_name(Plink L)
{
char name1[10];
printf("输入要查找的姓名:");
scanf("%s",name1);
Plink t = L;
int i,e,pos=-1;
for(i = 0;i<L->len;i++)
{
t = t->next;
if(strcmp(name1,t->data.name)==0)
{
pos=i+1;//保留节点位置
printf("查找成功,位置为第%d:\n",pos);
break;
}
}
if(pos==-1)
{
printf("不存在该节点值\n");
return -1;
}
return 0;
}