线性表建立学生信息表
用线性表建立学生信息表
在实验课上,要求操作线性表的基本操作及其应用,这是第一次实验,用到得是顺序表结构。
课程名:数据结构
实验目的:(1)掌握线性表的定义;
(2)掌握线性表的基本操作,如建立、查找、插入和删除等。
实验要求:定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能:
(1)根据指定学生个数,逐个输入学生信息;
(2)逐个显示学生表中所有学生的相关信息;
(3)根据姓名查找,返回此学生的学号和成绩;
(4)根据指定的位置可返回相应的学生信息(学号,成绩,姓名);
(5)给定一个学生信息,插入到表中指定的位置;
(6)删除指定位置的学生记录;
(7)统计表中学生个数。
实验题目:线性表的基本操作及其应用
实验过程:按照实验要求编写相应程序代码,并调试运行。
附:顺序表的主函数代码。
首先初始化顺序表,也就是构造一个空的顺序表。
【算法描述】
Status InitList(SqList &L)//构造空的顺序表L
{L.elem=new ElemType[MAXSIZE]; //分配一个大小为MAXSIZAE的数组空间
if(!L.elem) exit(OVERFLOW); //存储分配失败退出
L.length=0; //空表长度为0
return OK;
}
取值:根据指定的位置序号i,获取顺序表中第i个数据元素的值。这个获取,可以通过数组下标定位得到,elem[i-1]单元存储第i个数据元素。
【算法描述】
Status GetElem(SqList L,int i,ElemType &e)
{if(i<1||i>L.length) return ERROR; //判断i值是否合理e=L.elem[i-1];return OK;
}
查找:根据指定的元素值e,查找顺序表中第1个与i相等的元素。若查找成功,则返回该元素在表中的位置序号;若失败,返回0。
【算法描述】
int LocateElem(SqList L,ElemType e)
{for(i=0;i<L.length;i++)if(L.elem[i]==ereturn i+1; //查找成功return 0; //查找失败
}
插入:在表的第i个位置插入一个新的数据元素e,使长度为n的线性表变为长度为n+1的线性表。
【算法描述】
Status ListInsert(SqList &L,int i,ElemType e)
{if(i<1||i>L.length) return ERROR; //i值不合法if(L.length==MAXSIZE) return ERROR; //当前存储空间已满for(j=L.length-1;j>i-1;j--)L.elem[j+1]=L.elem[j]; //插入的位置及之后的元素后移L.elem[i-1]=e; //将新元素e放到第i个位置++L.length; //表长加1return OK;
}
删除:将表中的第i个元素删去,将长度为n的线性表变成长度为n-1的线性表。
【算法描述】
Status ListDelete(SqList &L,int i)
{if(i<1||i>L.length) return ERROR;for(j=i;j<=L.length-1;j++)L.elem[j-1]=elem[j]; //被删除元素之后的元素前移--L.length; //表长减1;return OK;
}
以上就是将要用到的顺序线性表的一些基本操作及其相关算法。下面我们就对这次实验的要求所写的程序进行编写:
有了上面的基本操作,剩下的就是主函数部分,当然,你也可以对这些基本操作进行适当的修改,不过在写主函数之前,还得对这个表进行输入东西,输入的是什么呢?肯定就是实验要求的东西啦,本次实验输入的就是一些学生信息(姓名,学号,成绩)。
【算法描述】
void Input(ElemType *e) //输入
{ printf("姓名:");scanf("%s",e->name); printf("学号:");scanf("%s",e->no); printf("成绩:");scanf("%d",&e->score); printf("输入完成\n\n");
}
当然,有输入就要有输出,不然输入的东西有什么意义呢?不过,在程序中,就算没有输入,也至少有一个输出,即只要是程序,就会要输出。输出的算法如下:
【算法描述】
void Output(ElemType &e) //输出
{ printf("姓名:%s\n学号:%s\n成绩:%d\n\n",e.name,e.no,e.score);
}
现在就只剩主函数部分了,那就直接上完整的代码:
【完整代码】
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100 typedef int Status; // 定义函数返回值类型 typedef struct
{ char no[8]; // 学号 char name[20]; // 姓名 int score; // 成绩
}student; typedef student ElemType; typedef struct
{ ElemType *elem; // 存储空间的基地址 int length; // 当前长度
}SqList; Status InitList(SqList *L) // 构造空的顺序表 L
{ L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE); if(!L->elem) exit(OVERFLOW); //分配失败退出 L->length=0; //长度为0 return OK;
} ElemType GetElem(SqList &L,int i) // 访问顺序表,找到 i位置,返回给 e
{ return L.elem[i];
}int Search(SqList &L,char str[]) // 根据名字查找,返回该同学在顺序表中的编号
{ for(int i=1;i<=L.length;i++) //查找成功,返回序号 i+1{ if(strcmp(L.elem[i].name,str)==0) return i; } return 0;
} Status ListInsert(SqList &L,int i,ElemType e) // 在 i位置插入某个学生的信息
{ if((i<1)||(i>L.length+1)) return ERROR; if(L.length==MAXSIZE) return ERROR; for(int j=L.length;j>=i;j--) { L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移} L.elem[i]=e; //将新元素e放入第i个位置++L.length; return OK;
} Status ListDelete(SqList &L,int i) // 在顺序表中删除 i位置的学生信息
{ if((i<1)||(i>L.length)) return ERROR; for(int j=i;j<=L.length;j++) { L.elem[j]=L.elem[j+1]; //被删除元素之后的元素前移} --L.length; //长度减一 return OK;
} void Input(ElemType *e) //输入
{ printf("姓名:");scanf("%s",e->name); printf("学号:");scanf("%s",e->no); printf("成绩:");scanf("%d",&e->score); printf("输入完成\n\n");
} void Output(ElemType &e) //输出
{ printf("姓名:%s\n学号:%s\n成绩:%d\n\n",e.name,e.no,e.score);
} int main()
{ SqList L; ElemType a,b,c,d; printf("1. 构造顺序表\n"); printf("2. 录入指定人数的学生信息\n"); printf("3. 显示学生表中的所有信息\n"); printf("4. 根据姓名查找该学生,并返回学号和成绩\n"); printf("5. 根据某指定位置显示该学生信息\n"); printf("6. 在指定位置插入学生信息\n"); printf("7. 在指定位置删除学生信息\n"); printf("8. 统计学生个数\n"); printf("0. 退出\n");int x,choose; while(1) { printf("请输入你要选择的功能前的序号:"); scanf("%d",&choose); if(choose==0) break; switch(choose) { case 1: if(InitList(&L)) printf("成功建立顺序表\n"); else printf("顺序表建立失败\n"); break; case 2: printf("请输入要录入学生的人数:"); scanf("%d",&x); for(int i=1;i<=x;i++) { printf("第%d个学生:\n",i); Input(&L.elem[i]); } L.length=x;break; case 3: for(int i=1;i<=x;i++) { a=GetElem(L,i); Output(a); } break; case 4: char s[20]; printf("请输入要查找的学生姓名:"); scanf("%s",s); if(Search(L,s)) Output(L.elem[Search(L,s)]); else printf("对不起,查无此人\n"); printf("");break; case 5: printf("请输入要查询的位置:"); int id1; scanf("%d",&id1); b=GetElem(L,id1); Output(b);break; case 6: printf ("请输入要插入的位置:"); int id2; scanf("%d",&id2); printf("请输入学生信息:\n"); Input(&c); if(ListInsert(L,id2,c)) { x++; printf("插入成功\n"); } else { printf("插入失败\n");}break; case 7: printf("请输入要删除的位置:"); int id3; scanf("%d",&id3); if(ListDelete(L,id3)) { x--; printf("删除成功\n");} else { printf("删除失败\n"); }break; case 8: printf("已录入的学生个数为:%d\n\n",L.length); break; } } printf("\n\n请按任意键退出\n\n"); return 0;
}
代码就是这样,如果有什么错误的地方,恳请大牛们指出纠正,非常感谢!
【参考文献】:《数据结构》(C语言版|第2版)严蔚敏 李冬梅 吴伟民编著
线性表建立学生信息表相关推荐
- 查询选修c语言课程的学生学号和姓名,数据库实验(学生信息表)
目录 数据库实验(学生信息表) 实验一 实验二 实验三 实验四 数据库实验(学生信息表) 实验一 创建数据库以及学生信息表.课程信息表.选课表 create Table student (Sno ch ...
- mysql实验学生表_数据库实验(学生信息表)
数据库实验(学生信息表) 实验一 创建数据库以及学生信息表.课程信息表.选课表 create Table student (Sno char(9) primary key, Sname char(20 ...
- 用顺序表创建学生信息花名册
问题:用顺序表创建学生信息包括姓名,学号,语数外3科成绩,并对顺序表实现基本的操作. 1.LinearList.h #ifndef _LINEARLIST_H_ #define _LINEARLIST ...
- PHP实现一个表单-学生信息登记表单
目录 一.前言 二.表单的定义的知识点讲解 1.定义表单 2.表单元素 三.代码段 1.表单的定义的代码 2.获取表单数据的代码 四.运行结果 1.DW编码界面 编辑2.网页运行界面 编辑3.填写 ...
- mysql数据库teach中有学生信息表_mysql综合性练习
题目描述 设定有一个数据库,里面有4张表: 学生表(student) 课程表(course) 成绩表(score) 教师信息表(teacher) 表结构如下: 表一_学生表(student) 属性名数 ...
- 怎么在mysql创建数据库怎么加入学号_数据库怎么创建学生信息表
语音内容: 大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 数据库创建学生信息表的方法是: 1.新建表:单击数据库"studentDb"前图标,然后右键&qu ...
- 学生信息表 -通过选择年级和班级得到详细的学生信息名单
功能: 通过选择年级和班级得到详细的学生信息名单 知识点: 1. A inner join B on A.id=B.id的应用 Inner Join 逻辑运算符返回满足第一个(顶端)输入与第二 ...
- 数据结构实验-学生信息表
(实验)自定义数据元素的类型和存储结构(顺序表或链表均可),完成如下的功能: ①录入:从键盘输入学生信息表的各个数据元素(至少包含学号,姓名,年龄,语文成绩,数学成绩,英语成绩): ②查找:可按学号查 ...
- 【Python练习】创建学生信息表-列表推导式的应用
1. 使用列表推导式,生成 2018-2021 四个年级,每个年级四个专业(计算机.机械.自动化和电子信息),每个专业三个班级,每个班级 45 人的对应学号(如 2019010205),共计 2160 ...
- 数据库单表查询教师班级学生信息表
单表查询实例 以下为单表查询小实验,由于没有教师表和学生表数据库文件,因此没有运行截图,若有语法错误还望大佬们指正. 1.查询学生信息表(info_student)中的班级信息 Select &quo ...
最新文章
- nagios2------添加监控对象
- curl php 空,直接访问链接有数据,CURL GET 一片空白
- Iframe高度自适应(兼容IE/Firefox、同域/跨域)
- Python中实现ASCII码与字符相互转换
- 计算机科学的理论基础
- 推荐13个.Net开源的网络爬虫
- Java面试题整理,docker可视化监控工具
- Python Twisted 介绍
- 拓端tecdat|R语言析因设计分析:线性模型中的对比
- ucinet计算聚类系数大于1怎么办_ucinet使用说明技巧.ppt
- 模糊集合及运算1.4
- 光大银行监控平台实践,含详细工具及架构选型思路
- MATLAB编程之混沌系统
- android学习总结(16.08.29)进度条控件ProgressBar和ProgressDialog
- 学生管理系统-C++版
- uniapp获取用户信息(登录及个人中心页面的实现)
- 课外知识:人工智能简明入门学习指南
- 团体程序设计天梯赛-练习集
- pySerial使用初步
- 使用全局变量有什么好处?有什么坏处?_徒手深蹲的好处和坏处是什么,空中健身告诉你...