/*
文件名称:1_1_2_8.cpp
作者:汤善康
日期:2019年6月30日
*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX 100//最大容量
typedef int Status;
typedef struct {
long ID;
char name[10];
int grade;
}student;
typedef student elemtype;
//定义顺序表
typedef struct {
elemtype elem;//存储空间基址,体现动态性
int length;//顺序表长度
}SqList;
//初始化顺序表
Status InitList(SqList &L)
{
L.elem = (elemtype)malloc(MAX * sizeof(elemtype));
if (L.elem)//成功建立顺序表
{
L.length = 0;//初始化顺序表长度为0
return 1;//返回1
}
else//未能建立顺序表
return 0;//返回0
}
//输入元素
void Input(elemtype &L)
{
printf(“请输入ID:\n”);
scanf("%d", &L.ID);
printf(“请输入姓名\n”);
scanf("%s", &L.name);
printf(“请输入成绩:\n”);
scanf("%d", &L.grade);
}
//输出打印学生信息
void Output(elemtype &L)
{
printf("%8d%8s%8d\n", L.ID, L.name, L.grade);
}
//返回L.elem中第i个元素的值
elemtype Getelem(SqList &L, int i)
{
return L.elem[i - 1];
}
//在指定位置插入元素
Status ListInsert(SqList &L, int n,elemtype e)
{
int i;
if (n > 0 && n <= L.length&&L.length < MAX)//要插入的位置合适且线性表未满
{
L.elem[n] = e;
for (i = L.length; i >= n; i–)
{
L.elem[i + 1] = L.elem[i];
}
L.length++;
return 1;//返回1
}
else
return 0;//返回0
}
//删除指定位置学生信息
Status Listdelete(SqList&L, int n)
{
int i;
if (n > 0 && n <= L.length&&L.length > 0)//要删除的位置合适且线性表非空
{
for (i = n - 1; i < L.length; i++)
{
L.elem[i] = L.elem[i + 1];
}
L.length–;
return 1;//返回1
}
else
return 0;//返回0
}
int main()
{
SqList rl;
int a;//选择的程序序号
int b;//学生人数
int i;
elemtype d;
int c;//指定读取学生信息的学生位次
printf(“\n");//打印输出系统各个选项
printf(“1.建立顺序表\n”);
printf(“2.存入学生信息\n”);
printf(“3.显示现有所有学生的信息\n”);
printf(“4.读取指定学生信息\n”);
printf(“5.插入学生信息\n”);
printf(“6.删除学生信息\n”);
printf("\n”);
while (1)
{
printf("请输入要选择的程序序号\n");
scanf("%d", &a);
switch (a)
{
case 1:
if (InitList(rl) == 1)//调用函数建立初始化顺序表
{
printf("成功建立顺序表\n");
}
else
{
printf("建立失败\n");
}
break;
case 2:
printf("请输入要录入学生人数:");
scanf("%d", &b);
for (i = 0; i < b; i++)
{
Input(rl.elem[i]);
rl.length++;//循环b次调用输入函数录入学生信息
}
break;
case 3:
for (i = 0; i < rl.length; i++)
{
Output(rl.elem[i]);//循环调用函数打印所有学生信息
}
break;
case 4:
printf("您要查找第_个学生的信息?\n");
scanf("%d", &c);
d = Getelem(rl, i);//调用函数将rl.elem的第i个元素赋值给d
Output(d);//调用函数打印输出d
break;
case 5:
printf("请输入要插入学生信息的位置序号\n");
scanf("%d", &i);
printf("请输入欲插入学生的信息:\n");
Input(d);//调用输入函数输入欲插入学生的学生信息
if (ListInsert(rl, i, d) == 1)//调用插入函数插入学生信息
printf("成功插入\n");
else
printf("插入失败\n");
break;
case 6:
printf("请输入要删除的学生位次:\n");
scanf("%d", &i);
if (Listdelete(rl, i) == 1)//调用删除函数删除第i个学生的学生信息
printf("成功删除该学生信息\n");
else
printf("删除失败\n");
break;
}
}
}