链表实现学生信息菜单管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
链表实现学生信息菜单管理
系统
-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
实验名称:链表实现学生信息菜单管理系统
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:
1、编程完成顺序表的基本操作:建立、删除、查找及显示。
2、按要求完成学生名册管理程序的编写和调试。
三、实验结果:
1、创建:
2、删除:
3、添加:
4、退出:
四、实验中遇到的问题及解决方法:
问题一:
地址传递出错
解决方案:
参考网上资料代码。
问题二:
创建时,停止暂停
解决方案:
输入学号为零时停止输入
问题三:
创建时需要学号姓名成绩都为零才能停止创建
解决方案:占无解决方案
五、实验心得体会:
链表中指针的使用要注意指针的性质,确保地址正确传递,要改变的值正确改变。在编程过程中很容易出现地址传递出错的问题,需要有耐心慢慢排查故障,解决故障。
通过本次实验让我明白了链表的操作使用,加深了我对链表的理解,同时也通过不断地练习提高了编程能力,链表的掌握对于这门课程而言十分重要,在今后的学习中,我需要更加努力,才能更好的掌握和使用链表。
源代码:
#include
#include
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
int num;
char name[20];
float score;
struct student *next;
};
int n;
struct student *Create()
{
struct student *head;
struct student *p1 = NULL;
struct student *p2 = NULL;
n = 0;
p1 = (struct student *) malloc (LEN);
p2 = p1;
if(p1==NULL)
{
printf ("\nCann't create it, try it again in a moment!\n");
return NULL;
}
else
{
head = NULL;
printf("请输入第%d个学生学号姓名成绩:\n",n+1);
scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));
}
while(p1->num != 0)
{
n += 1;
if(n == 1)
{
head = p1;
p2->next = NULL;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct student *) malloc (LEN);
printf("请输入第%d个学生学号姓名成绩:\n",n+1);
scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));
}
p2->next = NULL;
free(p1);
p1 = NULL;
return head;
}
void Print(struct student *head)
{
struct student *p;
printf ("\nNow , These %d records are:\n", n);
p = head;
if(head != NULL)
{
printf("head is %o\n", head);
do
{
printf ("%d\t%s\t%5.1f\n", p->num, p->name, p->score);
p = p->next;
}
while (p != NULL);
}
}
struct student *Del (struct student *head, int num)
{
struct student *p1;
struct student *p2;
if (head == NULL)
{
printf ("\nList is null!\n");
return head;
}
p1 = head;
while (p1->num != num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(p1->num==num)
{
if (p1 == head)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}
free (p1);
p1 = NULL;
printf ("\ndelete %ld success!\n", num);
n -= 1;
}
else
{
printf ("\n%ld not been found!\n", num);
}
return head;
}
struct student *Insert (struct student *head, int num, struct student *node) {
struct student *p1;
if (head == NULL)
{
head = node;
node->next = NULL;
n += 1;
return head;
}
p1 = head;
while(p1->num != num && p1->next != NULL)
{
p1 = p1->next;
}
if (p1->num==num)
{
node->next = p1->next;
p1->next = node;
n += 1;