//任务
//实现对学生成绩的管理(学生成绩表的初始化、插入、删除操作)
//2.将程序完整的浏览一遍,熟悉程序是如何实现的,以及思考以后如何编写的问题。
//3.熟练掌握程序的格式(三层):基础定义(符号常量、类型重定义、顺序表类型的定义、基本操作)、主函数、函数自定义
#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 1
#define FAILURE 0
#define OVERFLOW 1
#define MAXSIZE 20 //数组的最大空间
//typedef int ElemType; // 数据元素类型( 可根据问题需要,进行设计)
typedef struct stu{
int no;
char name[10];
float score;
}ElemType;
typedef int Status; //函数返回值状态
//顺序表的类型定义(具体)
typedef struct
{
ElemType* elem; //存储空间的起始地址(数组的首地址)
int length; //顺序表的长度
}SqList;
//基本操作(函数声明部分)
Status InitList(SqList &L); //顺序表的初始化
int ListInsert(SqList &L,ElemType item,int pos);//在第pos个位置插入一个元素item
void ListDel(SqList &L,int pos);//删除指定位置上的元素
void ShowAll(SqList L);//查看顺序表所有元素
void Menu();//显示菜单信息
//以上都是准备工作
//主函数模块
int main()
{
//定义顺序表L
SqList L;
int n;//表长
int i;//选择
int pos; //插入位置
ElemType item; //数据元素item
InitList(L); //初始化顺序表
//初始化成功
printf("-----------顺序表初始化成功--------------\n");
while(1)
{
//显示顺序表操作菜单
Menu();
printf("请输入你的选择:");
scanf("%d",&i);
switch(i)
{
case 1:
printf("插入操作:\n请输入插入的位置和元素,空格隔开\n");
scanf("%d %d %s %f",&pos,&item.no,&item.name,&item.score);
ListInsert( L,item,pos);
break;
case 2:
printf("请输入删除的位置:");
scanf("%d",&pos);
ListDel(L, pos);
break;
case 3:ShowAll(L);break;
case 0:exit(1);break;
default:printf("请输入合法的选择值\n");
}
}
return 0;
}
void Menu( )
{
printf("-----------1:插入操作--------------\n");
printf("-----------2:删除操作--------------\n");
printf("-----------3:查看顺序表所有元素--------------\n");
printf("-----------0:结束对顺序表的操作--------------\n");
}
//顺序表的初始化
Status InitList(SqList &L)
{
//填空1
L.elem = (ElemType* )malloc(MAXSIZE * sizeof(ElemType));
if(!L.elem)
{
printf("init list error!\n");
exit(1);
}
//分配成功,填空2
L.length=0 ; //表为空
printf("分配成功\n");
return SUCCESS;
}
//插入操作,在pos位置插入元素item
int ListInsert(SqList &L, ElemType item, int pos)
{
int i = 0;
int n = L.length;//顺序表长度
//顺序表满
if(L.length == MAXSIZE)
{
printf("顺序表已满\n");
return FAILURE;
}
//插入位置不正确
if(pos < 1 || pos > n+1)
{
printf("插入位置不对\n");
return FAILURE;
}
//位置合法:pos>=1,pos<=n+1
//i为元素下标
for(i = n-1;i >= pos-1;i--)
{
//填空7
L.elem[i+1]=L.elem[i] ; //将元素依次往后移动一个位置
}
//填空8
L.elem[pos-1]= item ; //插入新元素
//表长加1
L.length++;
printf("插入成功\n");
return SUCCESS;
}
//删除指定位置上的元素
void ListDel(SqList &L,int pos)
{
ElemType item;
int i = 0;
//判断表是否为空
if(L.length == 0)
{
printf("表为空\n");
return ;
}
//位置不合法(小于第一个,大于最后一个)
if(pos < 1 || pos > L.length)
{
printf("位置不合法\n");
return ;
}
//位置合法
item=L.elem[pos - 1]; //保存元素值
//pos>=1,pos<L->lastIndex 需要将pos之后的所有元素往前移动一个位置
for(i = pos;i <= L.length - 1;i++)
{
//填空9
L.elem[i]=L.elem[i+1] ;//元素依次往前移动一个位置
}
L.length--;
printf("删除成功\n");
}
void ShowAll(SqList L)
{
int i;
if(L.length==0)
{
printf("顺序表为空\n");
return;
}
for(i=0;i<=L.length - 1;i++)
{
printf("学号\t姓名\t成绩\n");
printf("%d\t%s\t%f\t\n",L.elem[i].no,L.elem[i].name,L.elem[i].score);
}
}
一个小程序:学生成绩的管理(学生成绩表的初始化、插入、删除操作)
最新推荐文章于 2023-03-26 20:51:53 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)