顺序表--学生信息管理
顺序表结构
- 逻辑结构:线性表
- 存储结构:顺序存储
- 基本运算:
- 初始化
- 查找节点
- 插入节点
- 删除节点
数据准备
typedef int Status;typedef struct
{char name[20]; // 姓名char stuId[8]; // 学号}student;typedef student ElemType;typedef struct
{ElemType *elem; // 存储空间的基地址 int length; // 当前长度
}SqList;
初始化
分配内存,此时长度设为0。
Status InitList(SqList *L) // 初始化
{ L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);if(!L->elem) exit(-1); L->length=0; printf("初始化成功\n\n");return 1;
}
查找
int FindByStuId(SqList &L) // 根据学号查找,返回该同学在顺序表中的编号
{printf("请输入要查找的学生学号:"); char s[20]; scanf("%s",s);for(int i=1;i<=L.length;i++){if(strcmp(L.elem[i].stuId,s)==0)return i;}return 0;
}
插入
Status ListInsert(SqList &L,int i,ElemType data) // 在 i位置插入
{if((i<1)||(i>L.length+1)) //序号不正确 return 0;if(L.length>=MAXSIZE) //已经达到最大值 return 0;for(int j=L.length;j>=i;j--){L.elem[j+1]=L.elem[j]; //元素后移 }L.elem[i]=data;L.length++;return 1;
}
删除
Status ListDelete(SqList &L,int i) // 删除 i位置的学生信息
{if((i<1)||(i>L.length)) //序号不正确 return 0;for(int j=i;j<=L.length;j++){L.elem[j]=L.elem[j+1]; //元素前移 }L.length--;return 1;
}
总的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10int num;typedef int Status;typedef struct
{char name[20]; // 姓名char stuId[8]; // 学号}student;typedef student ElemType;
typedef struct
{ElemType *elem; // 存储空间的基地址 int length; // 当前长度
}SqList;Status InitList(SqList *L) // 初始化
{ L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);if(!L->elem) exit(-1); L->length=0; printf("初始化成功\n\n");return 1;
}void GetElem(SqList &L,int i) // 访问顺序表
{printf("学号:%-10s\t姓名:%-20s\n",L.elem[i].stuId,L.elem[i].name);
}void Input(ElemType *e)
{printf("姓名:"); scanf("%s",e->name);printf("学号:"); scanf("%s",e->stuId);printf("输入完成\n\n");
}void Input(SqList &L)
{printf("请输入要录入学生的人数:");scanf("%d",&num);for(int i=1;i<=num;i++){printf("第%d个学生:\n",i);Input(&L.elem[i]);} L.length=num;
}void Output(SqList &L)
{for(int i=1;i<=num;i++){ GetElem(L,i);}
}int FindByStuId(SqList &L) // 根据学号查找,返回该同学在顺序表中的编号
{printf("请输入要查找的学生学号:"); char s[20]; scanf("%s",s);for(int i=1;i<=L.length;i++){if(strcmp(L.elem[i].stuId,s)==0)return i;}return 0;
}ElemType FindByNum(SqList &L) // 根据序号查找,返回该同学的信息
{printf("请输入要查询的位置:");int n;scanf("%d",&n);GetElem(L,n);
}Status ListInsert(SqList &L,int i,ElemType data) // 在 i位置插入
{if((i<1)||(i>L.length+1)) //序号不正确 return 0;if(L.length>=MAXSIZE) //已经达到最大值 return 0;for(int j=L.length;j>=i;j--){L.elem[j+1]=L.elem[j]; //元素后移 }L.elem[i]=data;L.length++;return 1;
}void ListInsert(SqList &L)
{printf ("请输入要插入的位置:");int id; scanf("%d",&id);printf("请输入学生信息:\n");ElemType temp;Input(&temp);if(ListInsert(L,id,temp)){num++;printf("插入成功\n");}else{printf("插入失败\n");}
}Status ListDelete(SqList &L,int i) // 删除 i位置的学生信息
{if((i<1)||(i>L.length)) //序号不正确 return 0;for(int j=i;j<=L.length;j++){L.elem[j]=L.elem[j+1]; //元素前移 }L.length--;return 1;
}void ListDelete(SqList &L)
{printf("请输入要删除的位置:");int id; scanf("%d",&id);if(ListDelete(L,id)){num--;printf("删除成功\n");}else{printf("删除失败\n");}
}void menu()
{printf("\n********************************\n\n");printf("1. 录入信息\n");printf("2. 显示信息\n");printf("3. 按学号查找学生\n");printf("4. 按序号查找学生\n"); printf("5. 在指定位置插入学生信息\n");printf("6. 在指定位置删除学生信息\n");printf("7. 学生总数\n");printf("\n********************************\n\n");
}int main()
{menu();SqList L; ElemType a,b,c,d;int num,choose;if(InitList(&L)){while(1){printf("请输入选择,其他键退出:");scanf("%d",&choose);switch(choose){case 1: Input(L); break; case 2: Output(L); break; case 3: GetElem(L,FindByStuId(L)); break; case 4: FindByNum(L); break; case 5: ListInsert(L); break; case 6: ListDelete(L); break;case 7:printf("已录入的学生个数为:%d\n\n",L.length);break; default: exit(1);} }} else{printf("初始化失败!");} return 0;
}
运行结果:
注意:此程序没有太在意数据校验,乱输入可能有bug。
顺序表--学生信息管理相关推荐
- 考试报名管理系统C语言顺序表,学生信息管理系统(顺序表)实验
<学生信息管理系统(顺序表)实验>由会员分享,可在线阅读,更多相关<学生信息管理系统(顺序表)实验(29页珍藏版)>请在人人文库网上搜索. 1.精品文档数 据 结 构 课 程 ...
- 顺序表学生个人健康信息表(数组)
#include<iostream> #include<string> #include<stdlib.h> #include<fstream> #in ...
- 数据结构 线性顺序表 学生管理系统
今年是专升本第一年,跟老师学习做了个学生管理系统,有菜单选项,基本的增删改查都是没有问题的,废话不多说,代码呈上: #include <stdio.h> #include<mallo ...
- 顺序表——学生成绩管理
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入.删除.查找等操作.分别输出结果. # include <iostream> ...
- 学生信息管理(顺序表)(数据结构入门)
要求: 自己设计学生基本信息表 具备功能:创建.清空.销毁.插入.删除.按值查找.更新某人信息.指定位置查找.遍历. 详解我是没有了,可以看这里 瞎写的,欢迎纠错 #include <iostr ...
- 学生信息统计(顺序表)
实验目的 : 1 .掌握线性表的定义: 2 .掌握线性表的基本操作,如建立.查找.插入和删除等. 实验内容: 定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能: (1) 根 ...
- 学生信息管理系统——顺序表
定义一个包含学生信息(学号,姓名,成绩)的的 顺序表,使其具有如下功能: 1.1根据指定学生个数,逐个输入学生信息: 1.2逐个显示学生表中所有学生的相关信息: 1.3根据姓名进行查找,返回此学生的学 ...
- 一个包含学生信息的顺序表
#include <stdio.h> #include <stdlib.h> #include <string.h>#define MAXSIZE 100 /*单个 ...
- 用顺序表创建学生信息花名册
问题:用顺序表创建学生信息包括姓名,学号,语数外3科成绩,并对顺序表实现基本的操作. 1.LinearList.h #ifndef _LINEARLIST_H_ #define _LINEARLIST ...
最新文章
- 186. [USACO Oct08] 牧场旅行
- iOS_“图片浏览选择”功能的编写思路
- python小结教学_python教学
- 深入剖析ASP.NET的编译原理之二:预编译(Precompilation)
- 6大设计原则之单一职责原则
- anaconda+python3.7安装keras_win10(64)+python3.7+Anaconda3+tensorflow-cpu+Keras安装(亲测有效)...
- JavaScript 中的函数式编程实践
- 是什么原因引起的“ Invalid Session”错误?
- CISSP 重点知识点总结3
- PDF转Word软件
- Time Shift 与 Record 功能的区别
- 解决mac备忘录会自动将英文双引号转化为中文双引号
- springboot设置空参数_springboot请求参数为空
- 802.11a data rate
- The Coder Vol.1: 向上生长
- R7 5800H和i5 11300H参数对比差距大不大
- openvas linux/window漏洞扫描和整改
- 乐观处世,诚实做人,不骄不躁,积极进取; 勇于创新,踏实实现,谨慎规划,付诸实践; 事在人为...
- 电磁场与电磁波(1)——简史
- 库存管理系统软件哪个好用 盘点前十名!
热门文章
- 学术期刊的 LaTeX整理合集(持续更新中)
- 什么是SHA系列算法,SHA-1和MD5算法有什么区别
- ZoteroCNKI抓取不到学位论文的解决办法
- Ubuntu下配置、训练YOLO的全过程——无人机检测小系统
- CISCO学习笔记(四)Trunk功能及端口模式
- 网页代码扒ppt_用“扒片”的方法制作ppt
- android 无法添加帐户,安卓手机outlook无法登录、添加帐户
- AW-Convlution:An Attention Module for Convolutional Neural Networks
- 天干地支(python)
- 被百度 AI 官方认证的大学,到底是什么水平?