链表实现学生信息菜单管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档