数据结构(实验一 顺序表的存储和运算)

实验一、顺序表的表示和运算

实验目的:

熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。

实验要求:

能够实现线性表的顺序存储表示,能够实现顺序表的基本操作及应用。

实验内容:

编写程序实现下列的要求:

(1)设数据元素为整数,实现这样的线性表的顺序存储表示。

(2)键盘输入若干个数据元素,利用顺序表的基本操作,建立该表。

(3)利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。

(4)* 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。要求尽可能少地修改前面的程序来得到新程序。(这里用于比较的字段为分数)

练习及思考题:

(1) 不同类型的数据元素所对应的顺序表在类型定义和操作实现上有什么异同?

(2) 顺序表的操作上有什么特点?

(3) 不固定数据元素的个数,而通过特殊数据来标记输入数据的结束,实现这样的输入操作。

main.cpp

#include<iostream>
#include "sqlist.h"
using namespace std;int main(){SqList L;  InitSqList(L);//初始化 CreateSqList(L);//创建 Insert(L);//指定位置插入 Delete(L);//指定位置删除 Get(L);//按位查找 Locate(L);//按值查找 IncreaSize(L);//扩容 return 0;
}

basic.cpp

#include "sqlist.h"
#include<iostream>
using namespace std; 
//初始化
void InitSqList(SqList &L){//初始化顺序表L,顺序表的下标从0开始 L.data=new ElemType[InitSize]; L.length=0;L.MaxSize=InitSize;
}  
//销毁
void DestroySqList(SqList &L){//销毁顺序表L delete L.data;
}
//按位查找 
bool GetElem(SqList L,int i,ElemType &e){//在顺序表L中查找第i个元素,并返回该元素和状态 if(i<1||i>L.length) return false; e=L.data[i-1]; return true;
} 
//按值查找
int LocateElem(SqList L,ElemType e){//在顺序表L中查找值为e的元素,返回它的位置,如果没有,返回-1 for(int i=0;i<L.length;i++){if(L.data[i]==e){return i+1;} } return -1;
} 
//插入
bool IncreaseElem(SqList &L,int i,ElemType e){//在顺序表L的第i个位置插入元素e,返回一个新的顺序表L和状态 if(i<1||i>L.length+1) return false;//插入位置不合法 if(L.length==L.MaxSize) return false;//表已经满了,无法继续插入 for(int j=L.length-1;j>=i-1;j--){L.data[j+1]=L.data[j];} L.data[i-1]=e;L.length++; return true;
} 
//删除 
bool DeleteElem(SqList &L,int i,ElemType &e){//在顺序表L的第i个位置删除元素,返回一个新的顺序表L、被删除的元素和状态if(i<1||i>L.length) return false;e=L.data[i-1];for(int j=i;j<L.length;j++){L.data[j-1]=L.data[j];} L.length--;return true;
} 
//判空 
bool Empty(SqList L){//判断顺序表L是否为空 if(L.length==0) return true;else return false;
}
//输出打印
void PrintList(SqList L){for(int i=0;i<L.length;i++){cout<<L.data[i]<<" ";}cout<<endl;
} 

extra.cpp

#include "sqlist.h"
#include<iostream>
using namespace std;
//增加容量 
void IncreaseSize(SqList &L,int len){//为顺序表L增加len的容量,返回一个新的顺序表L ElemType *p=L.data;L.data=new ElemType[L.MaxSize+len];L.MaxSize+=len;for(int i=0;i<L.length;i++){L.data[i]=p[i]; }delete p;//释放原来的空间 
}
//建立顺序表
void CreateSqList(SqList &L){cout<<"----------------------建立顺序表-------------------------"<<endl;cout<<"请输入整数,用9999表示结束:"<<endl;int x;cin>>x;int cnt=1;while(x!=9999){IncreaseElem(L,cnt,x);cin>>x;cnt++;}cout<<"创建成功:";PrintList(L);//输出 
} 
//插入
void Insert(SqList &L){cout<<"----------------------   插入   -------------------------"<<endl;cout<<"请输入要插入的位置:";int i;cin>>i;cout<<"请输入要插入的数据元素:";ElemType e;cin>>e;if(IncreaseElem(L,i,e)){cout<<"插入成功:";PrintList(L);}else{cout<<"插入失败!"<<endl;} } 
//删除
void Delete(SqList &L){cout<<"----------------------   删除   -------------------------"<<endl;cout<<"请输入要删除的位置:";int i;cin>>i;ElemType e=0; if(DeleteElem(L,i,e)){cout<<"删除的数据元素是:"<<e<<endl;cout<<"删除成功:"; PrintList(L);}else{cout<<"删除失败!"<<endl; } 
} 
//按位查找
void Get(SqList L){cout<<"---------------------- 按位查找 -------------------------"<<endl;cout<<"请输入您要查询的位置:";int i;cin>>i;ElemType e=0;if(GetElem(L,i,e)){cout<<"查找成功:第"<<i<<"个位置上的数据为"<<e<<endl; }else{cout<<"按位查找失败!"<<endl; }
} 
//按值查找
void Locate(SqList L){cout<<"---------------------- 按值查找 -------------------------"<<endl;cout<<"请输入您要查询的数值:"; ElemType e;cin>>e; if(LocateElem(L,e)!=-1){cout<<"查找成功:"<<e<<"在顺序表中的位置为"<<LocateElem(L,e)<<endl; }else{cout<<"查找失败,顺序表中没有值为"<<e<<"的数据元素"<<endl; }
} 
//扩容
void  IncreaSize(SqList &L){cout<<"----------------------   扩容   -------------------------"<<endl;cout<<"当前容量:"<<L.MaxSize<<endl;cout<<"请输入您要扩大的容量:";int len;cin>>len;IncreaseSize(L,len);cout<<"扩容成功,当前容量:"<<L.MaxSize<<endl;
}

 sqlist.h

#ifndef CIRCLE_H
#define CIRCLE_H#define InitSize 100
typedef int ElemType;
typedef struct SqList{ElemType *data;//动态分配 int length;int MaxSize; 
}SqList;
void InitSqList(SqList &L);//初始化 
void DestroySqList(SqList &L);//销毁 
bool GetElem(SqList L,int i,ElemType &e);//按位查找 
int LocateElem(SqList L,ElemType e);//按值查找 
bool IncreaseElem(SqList &L,int i,ElemType e);//插入 
bool DeleteElem(SqList &L,int i,ElemType &e);//删除 
bool Empty(SqList L);//判空 
void PrintList(SqList L);//打印输出 void CreateSqList(SqList &L);//创建 
void IncreaseSize(SqList &L,int len); //扩容 
void Insert(SqList &L);
void Delete(SqList &L);
void Get(SqList L);
void Locate(SqList L);
void IncreaSize(SqList &L); 
#endif

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/557605.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebGIS航线编辑器(无人机航线规划)

无人机航点、航线规划&#xff0c;实现全自动航点飞行作业及飞行航拍。禁飞区、作业区功能保障飞行安全。 GIS引擎加载 const viewer new Cesium.Viewer("cesiumContainer", { imageryProvider: new Cesium.IonImageryProvider({ assetId: 3872 }), }); const im…

【开源】SpringBoot框架开发知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化

好用的GPTs&#xff1a;指定主题搜索、爬虫、数据清洗、数据分析自动化 Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文Scraper&#xff1a;爬虫自动化数据清洗数据分析 点击 Explore GPTs&#xff1a; Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文 搜索 Scho…

基于python+vue渔船出海及海货统计系统的设计与实现flask-django-php-nodejs

当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统渔船出海及海货统计采取了人工的管理方法&#…

RCE漏洞

RCE漏洞概述 远程命令执行/代码注入漏洞&#xff0c;英文全称为Reote Code/CommandExecute&#xff0c;简称RCE漏洞。PHPJava等Web开发语言包含命令执行和代码执行函数,攻击者可以直接向后台服务器远程执行操作系统命今或者运行注入代码&#xff0c;进而获取系统信息、控制后台…

Unity访问安卓(Android)或苹果(iOS)相册

1.下载Native Gallery for Android & iOS插件 2.在场景中添加截图按钮、选择图片按钮、选择视频按钮等 using OpenCVForUnity.CoreModule; using OpenCVForUnity.ImgprocModule; using OpenCVForUnity.UnityUtils; using System.Collections; using System.Collections.Gen…

CSS其他属性

文章目录 1. vertical-align1.1. 概念1.2. 常用值1.3. 作用1.4. 出现的情况一1.4.1. 原因1.4.2. 解决方案 1.5. 出现情况二1.5.1. 解决方案一1.5.2. 解决方案二1.5.3. 解决方案三 1.6. 出现情况三1.6.1. 原因1.6.2. 解决方案 2. 溢出效果2.1. 作用2.2. 属性名 3. 隐藏效果3.1. …

vue3 + ts +element-plus + vue-router + scss + axios搭建项目

本地环境&#xff1a; node版本&#xff1a;20.10.0 目录 一、搭建环境 二、创建项目 三、修改页面 四、封装路由vue-router 五、element-plus 六、安装scss 七、封装axios 一、搭建环境 1、安装vue脚手架 npm i -g vue/cli 2、查看脚手架版本 vue -V3、切换路径到需…

Eclipse For ABAP:安装依赖报错

1.安装好Eclipse后需要添加依赖,这里的地址: https://tools.hana.ondemand.com/latest 全部勾选等待安装结束; 重启后报错:ABAP communication layer is not configured properly. This might be caused by missing Microsoft Visual C++ 2013 (x64) Runtime DLLs. Consu…

通过 Socket 手动实现 HTTP 协议

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

线程(二)——互斥锁的补充+条件变量+信号量总结

&#x1f31f;条件变量代码&#x1f31f; &#x1f680;信号量代码&#x1f680; c并发编程&#xff08;书籍&#xff09; ✨互斥信号量——锁补充 ✨条件变量  &#x1f3ad;初始化销毁  &#x1f3ad;等待激活信号量  ✨错误代码片段 ✨信号量  &#x1f3ad;基本接口  …

Java 学习和实践笔记(43):数组的四个基本特点和学习任务

数组&#xff0c;在Java里&#xff0c;也是一个对象。 学习数组主要学习以下内容&#xff1a; 数组是相同类型数据的有序集合。其中&#xff0c;数组中的每一个数据称为一个元素。元素可以通过一个索引&#xff08;下标&#xff09;来访问它们。 数据有以下四个基本特点&…