顺序存储. 线性表&学生信息管理系统

/*
文件名称: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;
	}
	
}

}

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我来用中文回复。 要建立一存储学生信息的线性表,我们可以使用顺序存储结构来实现。顺序存储结构是指将数据元素存储在一段连续的存储空间中,通过下标来访问元素。 具体实现时,我们可以定义一个结构体,包含学生的姓名和年龄两个成员变量。然后使用数组来存储这些结构体,每个数组元素对应一个学生的信息。 下面是一个示例代码: ``` #include <stdio.h> #define MAX_SIZE 100 struct Student { char name[20]; int age; }; int main() { struct Student students[MAX_SIZE]; int n; printf("请输入学生人数:"); scanf("%d", &n); printf("请输入学生信息(姓名 年龄):\n"); for (int i = ; i < n; i++) { scanf("%s %d", students[i].name, &students[i].age); } printf("学生信息如下:\n"); for (int i = ; i < n; i++) { printf("%s %d\n", students[i].name, students[i].age); } return ; } ``` 这段代码定义了一个名为`Student`的结构体,包含了学生的姓名和年龄两个成员变量。然后定义了一个长度为`MAX_SIZE`的数组`students`,用来存储学生信息。 在`main`函数中,首先通过`scanf`函数获取学生人数`n`。然后使用一个循环,依次输入每个学生的姓名和年龄,并将其存储到`students`数组中。 最后,再使用一个循环,将`students`数组中的学生信息依次输出。 这样,我们就实现了一个用顺序存储结构存储学生信息的线性表,并将其信息显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值