#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; //空表长度为0return 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);}elseprintf("顺序表建立失败!\n\n");break;case 2://插入元素//插入过程//...break;} }return 0;
}