#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 10
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
//学生结构体的定义
typedef struct {
int no; //2位数的学号
char name[8]; //姓名
int score; //成绩
}Student;
//顺序表的定义
typedef struct {
Student *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList;
//算法2.1 顺序表的初始化:构造一个空的顺序表L
Status InitList_Sq(SqList *L) {
//为顺序表分配一个大小为MAXSIZE的数组空间
//malloc函数返回的是分配空间的地址,而elem是一个Student类型的指针,因此需要强制转换为(Student *)类型
//malloc函数的参数是要分配空间的大小,
//我们要在分配的空间中存储MAXSIZE个Student类型的数据,因此这块空间的大小为:MAXSIZE*sizeof(Student)
//sizeof(Student)表示一个Student类型的数据需要的空间大小
L->elem = (Student *)malloc(MAXSIZE*sizeof(Student));
if (!L->elem)
exit(OVERFLOW); //存储分配失败退出
L->length = 0; //空表长度为0
return OK;
}
//建表,即要建立含有具体数据的顺序表,因此建表之前需要先初始化,即先调用InitList_Sq(SqList *L)函数。
Status CreatList_Sq(SqList *L){
int i;
InitList_Sq(L);
printf("请输入你要创建的顺序表元素个数(输入数字小于10):\n\n");
scanf_s("%d", &L->length);//确定表长
if (L->length >= MAXSIZE) {
printf("输入数字超过顺序表的最大容量\n");
return ERROR;
}else{ //如果输入的表长合法,则要求用户逐个输入学生信息
for (i = 0; i<L->length; i++) {
printf("请输入第%d个学生的学号:", i+1);
scanf_s("%d", &L->elem[i].no);
printf("请输入第%d个学生的姓名:", i + 1);
scanf_s("%s", &L->elem[i].name, 8);
printf("请输入第%d个学生的成绩:", i + 1);
scanf_s("%d",&L->elem[i].score);
printf("*********第%d个学生信息输入完毕!********\n\n",i+1);
}
printf("---------全部学生信息输入完毕!-------------\n\n");
return OK;
}
}
//输出(显示)表中当前的所有元素
void printStudent(SqList *L){
int i ;
printf("学号\t姓名\t成绩\n");
for ( i = 0; i < L->length; i++)
{
printf("%d\t%s\t%d\n",L->elem[i].no,L->elem[i].name,L->elem[i].score);
}
}
int main() {
SqList L;
int i = 0, temp=0, a=-1, c=-1, choose=0;
float score=0;
printf("1. 建表\n");
printf("2. 插入\n");
printf("3. 删除\n");
printf("4. 查找\n");
printf("5. 取值\n");
while (choose == 0) {
printf("请选择:\n");
scanf_s("%d", &choose);
switch (choose) {
case 1://创建顺序表
if (CreatList_Sq(&L)){
printf("建表成功!\n\n");
printf("--------------当前表中的学生信息如下--------------\n\n");
printStudent(&L);
}
else
printf("顺序表建立失败!\n\n");
break;
case 2://插入元素
//插入过程
//...
break;
}
}
return 0;
}