#include
#include
区别
#include
typedef struct
{ //定义结构体类型,包含四项内容,可以自由添加int num;
char name[10];
int age;
char sex[5];
}st;
typedef struct node //构造结点(也是结构体变量)
{
st data; //数据域
struct node *next; //指针域(指向结构体,也就是自身)
}list;
list *create() //建立一个单链表
{
list *p,*r,*head; //定义结构体指针变量
int i,n;
head = (list *)malloc(sizeof(list)); //申请头结点
r = head;
head->next = NULL; //头结点的指针域先定义为空
printf("请输入学生人数:\n");
scanf("%d",&n);
printf("请输入学生个人信息:\n\n学号,姓名,年龄,性别\n");
for(i=1;i<=n;i++)
{
p = (list *)malloc(sizeof(list)); //申请一个结点
scanf("%d%s%d%s",&p->data.num,&p->https://www.doczj.com/doc/9511957029.html,,&p->data.age,&p->data.sex); //向结点的数据域输入学生信息
p->next = NULL;
r->next = p; //将头结点指向第一个结点,以此类推。
r = r->next;
}
return (head); //返回头结点的地址
}
void output(list *h) // 输出链表中的学生信息
{
list *p;
p = h->next; //使p指向第一个结点
if(p == NULL)
printf("------------学生信息为空------------------\n\n");
while(p!=NULL)
{
printf("学号,姓名,年龄,性别分别是:\n");
printf("%d,%s,%d,%s\n",p->data.num,p->https://www.doczj.com/doc/9511957029.html,,p->data.age,p->data.sex);
p = p->next;
}
}
void research(list *h) //查找链表中某一位学生信息
{
list *p;
int k;
p = h->next; //使p指向第一个结点
printf("请输入要查找学生的学号:\n");
scanf("%d",&k);
while(p && p->data.num!=k)
p = p->next; //找到学号为k的结点,如果没有,则p为空if(p)
{
printf("学号,姓名,年龄,性别为:\n");
printf("%d,%s,%d,%s\n",p->data.num,p->https://www.doczj.com/doc/9511957029.html,,p->data.age,p->data.sex);
}
else
printf("找不到此学生:\n");
}
void insert(list *h) // 插入一个学生信息到链表中(插到链表末尾)
{
list *p,*q,*r;
p = h->next;
r = h;
q = (list *)malloc(sizeof(list)); //申请一个新结点
printf("请输入插入学生的学号,姓名,年龄,性别:\n");
scanf("%d%s%d%s",&q->data.num,&q->https://www.doczj.com/doc/9511957029.html,,&q->data.age,&q->data.sex);
q->next = NULL;
while(p!=NULL)
{
r = p;
p = p->next;
}
r->next = q;
}
void dele(list *h) // 在链表中删除某一位学生信息
{
int k;
list *p,*r;
r = h;
p = h->next;
printf("请输入要删除学生的学号:\n");
scanf("%d",&k);
while(p && p->data.num!=k)
{
r = p; //找到学号为k的结点,如果没有,则p为空
p = p->next;
}
if(p)
{
r->next = p->next;
p->next = NULL;
free(p);
printf("学生信息已删除!\n\n");
}
else
printf("找不到此学生\n\n");
}
int main()
{
int i,j=1;
list *p;
char c = 13; //13是回车键的ASCII值
printf("-------------------------------------------\n");
printf(" 学生信息管理系统 \n");
printf("-------------------------------------------\n");
while(c==13)
{
printf(" 1,登记学生信息\n");
printf(" 2,浏览学生信息\n");
printf(" 3,查找学生信息\n");
printf(" 4,插入学生信息\n");
printf(" 5,删除学生信息\n");
printf("-------------------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&i);
switch(i)
{
case 1: p = create();break; //调用各函数,实现功能
case 2: output(p);break;
case 3: research(p);break;
case 4: insert(p);break;
case 5: dele(p); break;
}
printf("------------继续请敲回车!----------------\n");
c = getch();
}
return 0;
}
(注:文档可能无法思考全面,请浏览后下载,供参考。)