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

/*
文件名称: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
    评论
基于线性表的图书信息管理系统数据结构可以使用顺序表来实现。顺序表是一种线性表,它的元素在内存中是连续存储的。在图书信息管理系统中,可以使用顺序表来存储图书的信息和数量。 具体实现可以定义一个结构体来表示顺序表,包含一个指向元素的指针和记录表格长度的变量。在这个结构体中,可以定义一些操作函数来实现对顺序表的增删改查等操作。 例如,可以定义一个函数来初始化顺序表,一个函数来插入元素,一个函数来删除元素,一个函数来查找元素等等。这些函数可以根据具体需求来实现。 下面是一个基于线性表的图书信息管理系统数据结构的示例代码: ```c #define MAXSIZE 100 // 定义顺序表的最大长度 typedef struct { string bnum; // 书的编号 string bname; // 书的书名 float price; // 书的价格 } Book; typedef struct { Book elem[MAXSIZE]; // 储存的数据 int length; // 记录表格的长度 } Sqlist; // 初始化顺序表 void InitList(Sqlist &L) { L.length = 0; } // 插入元素 bool ListInsert(Sqlist &L, int i, Book e) { if (i < 1 || i > L.length + 1 || L.length == MAXSIZE) { return false; } for (int j = L.length; j >= i; j--) { L.elem[j] = L.elem[j - 1]; } L.elem[i - 1] = e; L.length++; return true; } // 删除元素 bool ListDelete(Sqlist &L, int i) { if (i < 1 || i > L.length) { return false; } for (int j = i; j < L.length; j++) { L.elem[j - 1] = L.elem[j]; } L.length--; return true; } // 查找元素 int LocateElem(Sqlist L, string bnum) { for (int i = 0; i < L.length; i++) { if (L.elem[i].bnum == bnum) { return i + 1; } } return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值