一、实验目的
1、掌握线性表的定义;
2、掌握线性表的基本操作,如建立、查找、插入和删除等。
二、实验内容
定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表(二选一),使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
三、实验环境
Dev C++
四、代码展示
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Student
{
char name[40];
char no[8];
float score;
}Studet;
typedef struct LNode//定义单链表节点类型,typedef用来起别名
{
Student data;//每个节点存放一个数据元素
LNode *next;//指针指向下一个节点
} LNode,*LinkList;
bool InitList(LinkList *L);//初始化一个空的单链表(带头结点) //此时应该是指针的指针,因为链表名字就是指针L
bool Empty(LinkList L);
bool InitList(LinkList *L)
{
*L = (LNode *)malloc(sizeof(LNode));//分配一个头结点
//传入的是指向单链表的指针的指针,所以先解引用,就是只想单链表的指针,让他指向头结点
if(*L == NULL)
return false;
(*L)->next = NULL;//头结点之后的结点还没有结点,所以让头结点里面指向下一个结点的指针变成空指针
//这里写*L->是错的,因为优先级的问题,因为*优先级比->要低,要写成(*L)->或者(**L).
return true;
}
bool Empty(LinkList L)
//此处传入的值是指向头结点的指针的复制品,但是其值也是头结点的指针,此处用于检验不需要进行传址
{
if(L->next == NULL)
return true;
else
return false;
}
//显示学生表信息(本质是按位查找,从第一个遍历到最后一个)
LNode *GetElem(LinkList *L,int i)
{
if(i<0)
return NULL;
LNode *p;//指针p指向当前扫描到的结点
int j = 0;//当前p指向的是第几个节点
p = *L;
while(p != NULL && j