一.实验目的:

1.掌握c++调试线性表的基本操作方法。

2.掌握顺式与链式线性表的基本操作:插入,删除,查找等等。

3.如何改进程序的健壮性如何做到界面友好。

二.实验环境

vscode,g++编译器。

三.上机内容

定义一个包含学生信息的顺式表和链式表,使其具有如下功能:

  1. 指定学生个数,输入学生信息。
  2. 显示列表中所有学生的学生信息。
  3. 根据名字查询学生学号与成绩。。
  4. 根据列表顺序来查找学生信息。
  5. 给定一个学生信息,插入到表中指定的位置。
  6. 删除指定学生的学生记录。
  7. 统计表中个数。

四.上机调试流程图

链式顺序表中根据姓名查找的算法流程图:

启动程序,然后输入姓名a。在列表中判断有没有name==a,如果有则输出学生信息。没有则输出没有这名学生。

链式顺序表中插入算法的流程图:

程序开始,输入插入位置a和数据x。先判断插入位置a是否合法,再将第a-1个节点指针域指向x,x的指针域指向原来的第a个节点。

五.测试结果

1.启动程序,检测创建列表功能。

按照菜单提示,先输入1。

继续根据提示输入数据 1 a 1

3 c 3

结果创建列表成功。

========开始========
菜单:
创建列表请按1.
输出列表请按2.
插入数据请按3.
删除数据请按4.
姓名查找请按5.
顺序查找请按6.
列表长度请按7.
结束程序请按8.
请选择下一操作:
1
输入学生人数2
输入学号,姓名,成绩1 a 1
输入学号,姓名,成绩3 c 3
创建列表成功!!!
请选择下一操作:

2.检测插入数据功能。按3选择插入数据功能,插入数据2 b 2到第二个数据单元,在输入2查看线性表。结果如下,成功将数据2 b 2插入到列表第二个数据单元。

3
分别输入插入的位置,学号,姓名与分数:
2 2 b 2
请选择下一操作:
2
1 a 1
2 b 2
3 c 3
请选择下一操作:

3.检测两种查询功能。输入5,按照名字查询学号和成绩。输入6,按照序号查学生信息。结果如下,查询功能都成功运行。

5
输入待查找的名字:b
学号:2
成绩:2
请选择下一操作:
6
请输入学生序号:
1
学号:1 姓名:a 分数:1
请选择下一操作:

4 检测删除功能。

先输入7查询列表长度,按2查看链表。

然后输入4,删除第二个数据单元,再查看长度与链表。

结果如下,成功删除了第二个数据单元,列表长度减一,查看列表中第二个数据元素被删除。

7
列表的长度:3
请选择下一操作:
2
1 a 1
2 b 2
3 c 3
请选择下一操作:
4
请输入删除的排序1
请选择下一操作:
7
列表的长度:2
请选择下一操作:
2
1 a 1
3 c 3
请选择下一操作:

最后输入0,程序结束。

六.实验总结

在此次实验中,我学习到了如何改进程序的界面友好性,加强程序的健壮性。查询资料反复调试后,逐步改进了程序,学会了运用c➕➕语言来成功创建了顺式表和链式表,受益匪浅。

七.代码

顺式表代码如下

#include<stdio.h>
#include<iostream>
#include <string.h>
#include <string>
using namespace std;
//数组的最大长度
#define OK 1
#define error 0
#define MAX 10
//OK和error代表函数状态,分别为1(函数成功运行),0(函数出错)
typedef int Status;
//Status是函数类型,其值是函数结果状态代码,如OK代表成功,error代表出错。
//ElemType代表数组类型,根据实际情况确定,这里假设为int型typedef struct
{char name[20];char id[8];int score;
}Student;typedef struct{Student *elem;int length;
}SqList; Status InitList(SqList &L)
{L.elem=new Student [MAX];L.length=0;return OK;
}
Status InputList(SqList &L){cout<<"输入学生人数";cin>>L.length;if (L.length>MAX||L.length<0) exit(error);for(int i=0;i<L.length;i++){cout<<"输入学号,姓名,成绩";cin>>L.elem[i].id>>L.elem[i].name>>L.elem[i].score;}cout<<"创建列表成功!!!\n";return OK;
}
Status OutList(SqList &L){for(int i=0;i<L.length;i++){cout<<L.elem[i].id<<" "<<L.elem[i].name<<" "<<L.elem[i].score<<endl;}return OK;
}
Status GetElem(SqList L)
{char name[20];cout<<"输入待查找的名字:";cin>>name;int j=0;for(int i=0;i<L.length;i++){if(strcmp(name,L.elem[i].name)==0){cout<<"学号:"<< L.elem[i].id<<"\n成绩:"<<L.elem[i].score<<endl;}else j++;}if (j==L.length)cout<<"没有这个人的名字";return 0;
}
Status GetElem_2(SqList L)
{cout<<"请输入学生序号:\n";int i;cin>>i;while (i<0||i>L.length) {cout<<"请输入合法的学生序号:\n";cin>>i;}i=i-1;cout<<"学号:"<<L.elem[i].id<<" 姓名:"<< L.elem[i].name<<" 分数:"<<L.elem[i].score<<endl;return OK;
}
Status ListInsert(SqList &L)
{int i;char name[20];char id[8];int score;cout<<"分别输入插入的位置,学号,姓名与分数:\n";cin>>i>>id>>name>>score;if (i<0||i>L.length+1) return error;if (L.length==MAX) return error;for (int j=L.length;j>=i-1;j--){L.elem[j+1]=L.elem[j];}strcpy(L.elem[i-1].name,name);strcpy (L.elem[i-1].id,id);L.elem[i-1].score=score;++L.length;return OK;
}
Status ListDelete(SqList &L)
{int i;cout<<"请输入删除的排序";cin>>i;if (i<0||i>L.length){return error;}for (int j=L.length-1;j>i;j--){L.elem[j-1]=L.elem[j];}--L.length;return OK;
}
Status ListStastic(SqList &L){cout<<"列表的长度:"<< L.length<<endl;return 0;
}
int main()
{SqList List;InitList (List);cout<<"========开始========\n";cout<<"菜单:\n";int a;cout<<"创建列表请按1.\n";cout<<"输出列表请按2.\n";cout<<"插入数据请按3.\n";cout<<"删除数据请按4.\n";cout<<"姓名查找请按5.\n";cout<<"顺序查找请按6.\n";cout<<"列表长度请按7.\n";cout<<"结束程序请按8.\n";while(1){cout<<"请选择下一操作:\n";cin>>a;    switch (a){case 0:cout<<"========结束========";return 0;case 1:InputList(List);break;case 2:OutList(List);break;case 3:ListInsert(List);break;case 4:ListDelete(List);break;case 5:GetElem(List);break;case 6:GetElem_2(List);break;case 7:ListStastic(List);break;}}return 0;
}

链式表代码如下:

#include <iostream>
#include <string>
#include <string.h>
#define OK 0
#define error -1
using namespace std;
typedef int Status;
typedef struct
{char name[8];char id[8];float score;
}Student;
typedef struct LNode{Student data; struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L){L=new LNode;L->next=NULL;return OK;
}
Status InputList(LinkList &L){int num;cout<<"请输入学生个数:\n";cin>>num;L=new LNode;L->data.score=num;L->next=NULL;LNode *r=L;for (int i=0;i<num;i++){cout<<"分别输入学号,姓名,分数:\n";LNode *p=new LNode;cin>>p->data.id>>p->data.name>>p->data.score;p->next=NULL;r->next=p;r=p;}return OK;
}
Status OutputList(LinkList &L){LNode*p=L->next;int a =L->data.score;for (int i=0;i<a;i++){cout<<"学号:"<<p->data.id<<" 姓名:"<<p->data.name<<" 成绩:"<<p->data.score<<endl;p=p->next;}return OK;
}
Status GetList(LinkList &L){char name[20];cout<<"请输入查询的姓名\n";cin>>name;LNode*p=L->next;int a=L->data.score;int j=0;for (int i=0;i<a;i++){if (strcmp((p->data).name,name)==0){ cout<<"学号为:"<<p->data.id<<"\n分数为:"<<p->data.score<<endl;}else j++;p=p->next;}if (j==a)cout<<"查无此人";return OK;
}
Status GetList_2(LinkList &L){int i;cout<<"请输入序号";cin>>i;if (i<0||i>L->data.score) {cout<<"请输入合法的学生序号\n";exit (error);}LNode*p=L->next;for (int j=0;j<i-1;j++)p=p->next;cout<<"学号:"<<p->data.id<<" 姓名:"<< p->data.name<<" 分数:"<<p->data.score<<endl;return 0;
}
Status InsertList(LinkList &L){int i,j;char name[20];char id[8];int score;cout<<"分别输入插入的位置,学号,姓名与分数\n";cin>>i>>id>>name>>score;LNode*p=L;j=0;while((p->next)&&(j<i-1)){p=p->next;j++;}if (!p||j>i-1) return error;LNode *s;s=new LNode;strcpy(s->data.id,id);s->data.score=score;strcpy(s->data.name,name);s->next=p->next;p->next=s;L->data.score++;return OK;
}
Status DeleteList(LinkList &L){cout<<"输入需删除的序号:";int i,j;cin>>i;LNode *p=L;j=0;while((p->next)&&(j<i-1)){p=p->next;++j;}if (!p||j>i+1) return error;LNode *q;q=p->next;p->next=q->next;delete q;L->data.score--;return OK;
}
Status ListStastic(LinkList &L){cout<<"长度为:"<<L->data.score<<endl;return OK;
}
int main()
{LinkList List;int a;cout<<"请选择一下操作\n";cout<<"创建列表请按1.\n";cout<<"输出列表请按2.\n";cout<<"插入数据请按3.\n";cout<<"删除数据请按4.\n";cout<<"姓名查找请按5.\n";cout<<"顺序查找请按6.\n";cout<<"列表长度请按7.\n";cout<<"结束程序请按8.\n";while(1){cout<<"请选择一下操作\n";cin>>a;    switch (a){case 0:cout<<"========结束========";case 1:InputList(List);break;case 2:OutputList(List);break;case 3:InsertList(List);break;case 4:DeleteList(List);break;case 5:GetList(List);break;case 6:GetList_2(List);break;case 7:ListStastic(List);break;}}
}

数据结构第一次上机实验报告相关推荐

  1. c语言上机第一次实验报告怎么写,C语言程序设计-实验第一次上机实验报告.doc...

    C语言程序设计-实验第一次上机实验报告 2.第一次实验 C语言程序设计 实验报告 专业 计算机科学与技术 班级 信安1302班 日期 2014.3.22 成绩 实验组别 第 1 次实验 表达式和标准输 ...

  2. 2019级计算机学院数据结构编程作业,数据结构上机实验报告

    时间:2019-05-12 08:38:58 作者:admin 数据结构实验报告 课程 数据结构 _ 院 系 专业班级 实验地点姓 名 学 号 实验时间 指导老师 数据结构上机实验报告1 一﹑实验名称 ...

  3. 数据结c语言约瑟夫环实验报告,数据结构约瑟夫环实验报告.doc

    数据结构约瑟夫环实验报告.doc 数据结构与算法设计约瑟夫环实验报告实验一专业物联网工程班级物联网1班学号15180118姓名刘沛航一. 实验目的 1.熟悉VC环境,学习使用C语言利用链表的存储结构解 ...

  4. c语言链表上机实验答案,数据结构全部上机实验及答案.doc

    数据结构全部上机实验及答案 淮海工学院 数据结构实验指导书 计算机软件教研室 实验1线性表的抽象数据类型的实现 实验目的 1)掌握线性表的顺序存储结构和链式存储结构: 2)熟练掌握顺序表和链表基本算法 ...

  5. 计算机数值模拟实验报告,安徽工业大学 材料成型专业课《塑性成型计算机模拟》上机实验报告...doc...

    文档介绍: 金属成型过程数值模拟 上机实验报告 (指导教师:李胜祗老师) 姓名:金杰灵 学号:109024445 班级:型102 上机实验时间:6月13日 金属成型过程数值模拟 上机实验报告 专业:材 ...

  6. 通信系统计算机仿真上机实验报告,昆明理工大学计算机仿真实验.docx

    文档介绍: <计算机仿真>上机实验报告姓名: 学号:-专业:-测控技术与仪器 班级:_121-班 实验一常微分方程的求解及系统数学模型的转换实验目的通过实验熟悉计算机仿真中常用到的Matl ...

  7. c语言的适当大小的子集,编译原理上机实验报告

    编译原理上机实验报告,编制C语言子集的词法分析程序,编制递归下降法的语法分析程序 编译技术上机实验题目 实验一 一.题目 编制C语言子集的词法分析程序 二.目的 通过设计.编制.调试一个具体的词法分析 ...

  8. Java第一次上机实验源代码

    小学生计算题: package 第一次上机实验_; import java.util.*; public class 小学计算题 { public static void main(String[] ...

  9. 计算机组成原理上机实验报告.doc,计算机组成原理第二次上机实验报告.doc

    <计算机组成原理第二次上机实验报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<计算机组成原理第二次上机实验报告.doc>文档请在天天文库搜索 ...

最新文章

  1. 自动驾驶软件工程课程系列2:定位与地图
  2. R语言可视化:散点图、散点图和折线图(line charts)、3D散点图、旋转3D散点图、气泡图、corrgram包可视化相关性矩阵、马赛克图( Mosaic plots)、hexbin、密度图
  3. java1.8 indexes_java1.8源码之ArrayList源码解读
  4. 最全的CSS浏览器兼容问题整理
  5. ANSYS Motion 2020 R2中文版
  6. SAP UI5应用debug级别的日志打印如何设置
  7. Centos6.8下SVN安装
  8. java scanner 回车_Java Scanner类用法及nextLine()产生的换行符问题实例分析
  9. MyBatis官方文档——XML配置部分
  10. Kotlin 常用API汇总
  11. Springboot导出excel工具类
  12. 工业互联网大数据平台建设方案
  13. (21)心有猛虎,细嗅蔷薇之Backward Propagation
  14. MDP 与 贝尔曼方程
  15. mysql nlssort_nlssort排序
  16. 《利用python进行数据分析》读书笔记--第十一章 金融和经济数据应用(一)
  17. vsync与hsync
  18. 大数据中心系统集成资质
  19. position inherit 定位
  20. 域名注册,选择注册商的安全重要性

热门文章

  1. Markdown语法之html内嵌样式
  2. SpringBoot WEB怎么实现大文件上传
  3. 最小二乘、加权最小二乘 matlab实现
  4. php将json转化成数组,php如何把json转换成数组
  5. python--Folium
  6. Microsoft SQL Server Download
  7. python 淘宝滑块验证_python selenium 淘宝滑块验证码 问题
  8. 网页视频播放速度修改器,亲测可用
  9. What is XMP
  10. PortSwigger Academy | Authentication : 身份认证