一、实验目的

​​​​​​​

1.了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。

2.掌握线性表的顺序存储结构的定义及C语言实现。

3.掌握线性表的链式存储结构——单链表的定义及C语言实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容

1. 定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能:

(1) 根据指定学生个数,逐个输入学生信息;

(2) 逐个显示学生表中所有学生的相关信息;

(3) 根据姓名进行查找,返回此学生的学号和成绩;

(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);

(5) 给定一个学生信息,插入到表中指定的位置;

(6) 删除指定位置的学生记录;

(7) 统计表中学生个数。

2. 定义一个包含学生信息(学号,姓名,成绩)的单链表,使其具有如下功能:

(1) 根据指定学生个数,逐个输入学生信息;

(2) 逐个显示学生表中所有学生的相关信息;

(3) 根据姓名进行查找,返回此学生的学号和成绩;

(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);

(5) 给定一个学生信息,插入到表中指定的位置;

(6) 删除指定位置的学生记录;

(7) 统计表中学生个数。

#include<iostream.h>
#include<string.h>
#include<iomanip.h>
using namespace std;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define Maxsize 50
//学生信息的定义
typedef struct {char no[10]; //10 位学号char name[20]; //姓名int score; //成绩
}Student;
//顺序表的定义
typedef struct {Student *elem; //指向数据元素的基地址int length; //线性表的当前长度
}SqList;
Status InitList(SqList &L); // 构造空的顺序表 L
Status CreatList(SqList &L,int n);//根据指定学生个数 n,逐个输入学生信息;
void OutputList(SqList L);//逐个显示学生表中所有学生的相关信息;
Status FindList(SqList L,char name[]);//根据姓名进行查找,返回此学生的学号和成绩;
Status GetList(SqList L,int i);//根据指定的位置 i 可返回相应的学生信息(学号,姓名,成绩);
Status InsertList(SqList &L,int i,char no[],char name[],int score);//给定一个学生信息,插入到表中指定的位置;
Status DeleteList(SqList &L,int i);// 删除指定位置的学生记录;
Status CountList(SqList L);// 统计表中学生个数。
int main()
{
SqList L;
int n;//总人数
int i,m;
char a;
char no[10]; //10 位学号char name[20]; //姓名int score; //分数
cout<<"请输入学生的个数\n";
cin>>n;
InitList(L);
CreatList(L,n);
cout<<"\n 依次显示学生表中所有学生的相关信息:\n";
OutputList(L); cout<<"\n----------------------\n";cout<<"插入功能请输 i 或 I\n";cout<<"删除功能请输 d 或 D\n";cout<<"查找功能请输 f 或 F\n";cout<<"求学生人数请输入 c 或 C\n";cout<<"输出功能请输 o 或 O\n";cout<<"定位功能请输 g 或 G\n";cout<<"退出功能请输 q 或 Q\n"; //以上为功能介绍cout<<"----------------------\n";fflush(stdin); //清除键盘缓冲区cout<<"请输入功能选项:";
cin>>a;while(a!='q'&&a!='Q'){while(a!='i'&&a!='I'&&a!='d'&&a!='D'&&a!='f'&&a!='F'&&a!='c'&&a!='C'&&a!='o'&&a!='O'&&a!='g'&&a!='G') //判断输入的值是否有相应的功能{cout<<"暂时没有此功能,请重新输入:";fflush(stdin);cin>>a;}switch(a){case 'i':case 'I':
cout<<"\n请输入要插入的学生信息(学号、姓名和成绩):\n";
cin>>no>>name>>score;
cout<<"\n请输入待插入的位置:";
cin>>i;
if(InsertList(L,i,no,name,score)==ERROR)
cout<<"\n插入失败!\n";
else{cout<<"插入成功,插入后的结果为:\n";OutputList(L);
}
m=CountList(L);
cout<<"当前线性表有"<<m<<"个元素!\n";     break;case 'd':
case 'D':
cout<<"\n请输入要删除的学生位置:\n";
cin>>i;
if(DeleteList(L,i)==ERROR)
cout<<"\n删除失败!\n";
else{cout<<"删除成功,删除后的结果为:\n";OutputList(L);
}
m=CountList(L);
cout<<"当前线性表有"<<m<<"个元素!\n";
break;
case 'f':
case 'F':
cout<<"\n请输入要查找的学生姓名:\n";
cin>>name;
if(FindList(L,name)==ERROR)
cout<<"\n查找失败!\n";
else{cout<<"\n查找成功,查找的结果为:\n";cout<<"\n"<<L.elem[i].no<<" "<<L.elem[i].name<<" "<<L.elem[i].score;
}
break;
case 'c':
case 'C':
if(CountList(L)==ERROR)
cout<<"\n统计失败!\n";
else{cout<<"统计成功,统计的结果为:\n";CountList(L);
}
m=CountList(L);
cout<<"当前线性表有"<<m<<"个元素!\n";
break;
case 'o':
case 'O':
OutputList(L);
m=CountList(L);
cout<<"当前线性表有"<<m<<"个元素!\n";
break;
case 'g':
case 'G':
cout<<"\n请输入要定位的位置:\n";
cin>>i;
if(GetList(L,i)==ERROR)
cout<<"\n位置不合法,请重新输入\n";
else{cout<<"定位成功,定位后的结果为:";
cout<<L.elem[i-1].no<<" "<<L.elem[i-1].name<<" "<<L.elem[i-1].score<<"\n";
}
break;}
cout<<"\n----------------------\n";cout<<"插入功能请输 i 或 I\n";cout<<"删除功能请输 d 或 D\n";cout<<"查找功能请输 f 或 F\n";cout<<"求学生人数请输入 c 或 C\n";cout<<"输出功能请输 o 或 O\n";cout<<"定位功能请输 g 或 G\n";cout<<"退出功能请输 q 或 Q\n"; //以上为功能介绍cout<<"----------------------\n";fflush(stdin); //清除键盘缓冲区cout<<"请输入功能选项:";
cin>>a;}return 0;
}
Status InitList(SqList &L) // 构造空的顺序表 L
{   L.elem=new Student[Maxsize];if(!L.elem)  exit(OVERFLOW);L.length=0;return OK;
}
Status CreatList(SqList &L,int n) //根据指定学生个数,逐个输入学生信息;
{int i;if(n<1||L.length>Maxsize)return ERROR;     elsefor(i=1;i<=n;i++){cout<<"请输入第"<<i<<"个学生的学号、姓名和成绩:";cin>>L.elem[i-1].no>>L.elem[i-1].name>>L.elem[i-1].score;L.length++;}
}
void OutputList(SqList L) //逐个显示学生表中所有学生的相关信息;
{   int i;for(i=1;i<=L.length;i++)cout<<L.elem[i-1].no<<" "<<L.elem[i-1].name<<" "<<L.elem[i-1].score<<"\n";}
Status FindList(SqList L,char name[])//根据姓名进行查找,返回此学生的学号和成绩;
{   int i;for(i=0;i<L.length;i++)if(strcmp(L.elem[i].name,name)==0){cout<<"\n"<<L.elem[i].no<<" "<<L.elem[i].name<<" "<<L.elem[i].score; return OK;}
}
Status GetList(SqList L,int i) //根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
{
if(i<1||i>L.length)
return ERROR;
else
return OK;
}
Status InsertList(SqList &L,int i,char no[],char name[],int score) //给定一个学生信息,插入到表中指定的位置;
{
int j;if(i<1||i>L.length+1)/*插入位置不合法 */  return ERROR;if(L.length==Maxsize)//储存空间已满 return ERROR;for(j=L.length-1;j>=i-1;j--){L.elem[j+1]=L.elem[j];strcpy(L.elem[i-1].no,no);strcpy(L.elem[i-1].name,name);L.elem[i-1].score=score;++L.length;//长度加一 return OK;}
}
Status DeleteList(SqList &L,int i) // 删除指定位置的学生记录;
{ int j; if(i<1||i>L.length) return ERROR;for(j=i;j<=L.length-1;j++) {strcpy(L.elem[i-1].no,L.elem[j].no);strcpy(L.elem[i-1].name,L.elem[j].name);L.elem[i-1].score=L.elem[j].score;}--L.length;return OK;
}
Status CountList(SqList L) // 统计表中学生个数
{return L.length;
}

数据结构:学生信息管理系统(顺序存储结构)相关推荐

  1. C语言学生信息管理系统(结构体数组,文件)

    C语言学生信息管理系统(结构体数组,文件) 这是初学时写的一个程序,比较菜,不喜勿喷.在一个结构体里定义结构体内所有的信息(如果信息也需要分类则可以再定义一个结构体并在当前结构体内声明,我的这个代码在 ...

  2. C语言程序设计--学生信息管理系统

    题目:学生信息管理系统 1  系统设计 1.1设计要求 1.1.1设计任务 创建一个学生信息管理系统,让它来运行和管理学生信息,进行对学生学号.姓名.性别.年龄.出生年月日.住址.电话.E-maill ...

  3. 数据结构课程设计论文--学生信息管理系统

    数据结构课程设计论文--学生信息管理系统 1.学生成绩分析问题 (1)问题描述.录入并保存一个班级学生多门课程的成绩,并对成绩进行分析. (2)基本要求.a)通过键盘输入各学生的多门课程的成绩,建立相 ...

  4. 学生信息管理系统实习报告(java版数据结构)

    一. 问题分析 1.1 什么是学生信息管理系统以及研究意义 学生信息管理系统是校园网络中一个重要的应用系统,它大大改善了学校教学.科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平.信息管理 ...

  5. 【数据结构实习】学生信息管理系统2.0

    Student.h 1 #include<iostream> 2 #include<string> 3 #include<fstream> 4 using name ...

  6. 数据结构实验报告(一)学生信息管理系统

    大二计算机学生报告的汇总 进入计算机专业以来每天的必要工作就是写报告,按照老师的话来说,我们计算机专业的学生经过长时间的训练,以后出去写代码就跟喝水一样简单.在这里我将发表部分我写的报告,仅以此怀念我 ...

  7. 数据结构课程设计--学生信息管理系统

    stu.h /********************************************************************** *版权所有:2017,zhangcuipin ...

  8. c语言结构体编辑学生成绩管理,C语言基于结构体的学生信息管理系统实现

    宋福英 摘  要: 中国高校为保证学生信息安全,各分院的学生信息都在一个相对封闭的闭环内共享.中国高校在校生人数逐年递增,给高校的信息管理带来不小压力.C语言兼具高级语言和汇编语言的特点,简洁.紧凑. ...

  9. PHP 学生信息管理系统mysql数据库web结构apache计算机软件工程网页wamp

    一.源码特点     PHP 学生信息管理系统 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发. 代码下载 https://dow ...

  10. asp.net学生信息管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目

    一.源码特点         ASP.NET C# 学生信息管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlse ...

最新文章

  1. 把python语言翻译出来_Python语言实现翻译小工具(Python打包成exe文件)
  2. 中国最大的python社区-python求最大数
  3. python 基础命令-python常用命令有哪些
  4. MAT分析器查看jvm dump文件
  5. 物联网实验4 alljoyn物联网实验之手机局域网控制设备
  6. php简单环境,PHP 简单的环境搭建
  7. C# Hashtable和Dictionary区别
  8. 程序媛计划——mysql连接表
  9. 31 天重构学习笔记14. 分离职责
  10. linux系统监控命令汇总
  11. 荒唐可笑的文言文编程语言
  12. 传统梯度下降法面临的挑战
  13. MATLAB 均值估计函数normfit
  14. GIS数据转换成CAD数据,还原显示CASS码、符号样式及高程值等图形属性的解决方案,shp转dwg,arcgis数据转CAD数据
  15. 无敌论坛_无敌分享网_无敌资源网|专注CG教程和素材分享
  16. Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning 学习笔记
  17. 金融风控实战——反欺诈特征
  18. 使用jQuery实现轮播图
  19. 头歌-自己动手画CPU(第一关)-8位可控加减法器-Logisim
  20. 1467 A. Wizard of Orz

热门文章

  1. 微信小程序android拿不到数据,微信小程序奇怪问题,数据获取不到
  2. 汽修管理系统c语言,汽车维修人员请进
  3. 外挂开发 硬件级模拟键盘鼠标
  4. android 缩小消失动画,Android本身View的拉长缩短动画
  5. mysql上传spc数据慢_SPC的解决的问题
  6. 在网络工程师行业里,这6个误解,你知道吗
  7. matlab绘制四维透明图,matlab四维图绘制
  8. HTML大学生动漫网页设计作业源码 ~ 火影忍者动漫7页面带特效带轮播(HTML+CSS+JavaScript)...
  9. Windows中睡眠和休眠的区别
  10. Sedna终身学习以及KubeEdge梳理