数据结构c语言之线性表的实现

#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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值