线性表实验
实验目的与要求
实验目的:
- 线性表的逻辑结构特点和线性表抽象数据类型的描述方法
- 线性表的两类存储结构设计方法以及各自的优缺点
- 掌握线性表的基本知识
- 深入理解、掌握并灵活运用线性表。
- 熟练掌握线性表的存储结构及主要运算的实现
- 掌握栈的定义、栈的逻辑结构特性和栈的基本运算。
- 理解栈在表达式求值中的应用。
- 掌握队列的定义、队列的逻辑结构特性和栈的基本运算。
- 理解队列的应用。
实验要求:
编程实现如下功能:
递增有序顺序表的插入
1、已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序。
输入格式:
第1行输入顺序表长度,第2行输入递增有序的顺序表,第3行输入要插入的数据元素X。
输出格式
对每一组输入,在一行中输出插入X后的递增的顺序表。
两个有序链表序列的交集
2、已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
简单计算器
3、本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1 存放数字,另一个堆栈 S2存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:
- 从 S1 中弹出两个数字,顺序为 n1 和 n2;
- 从 S2 中弹出一个运算符 op;
- 执行计算 n2 op n1;
- 将得到的结果压回 S1。
直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。
输入格式:
输入首先在第一行给出正整数 N(1<N≤103),为 S1 中数字的个数。
第二行给出 N 个绝对值不超过 100 的整数;第三行给出 N−1 个运算符 —— 这里仅考虑 +、-、*、/ 这四种运算。一行中的数字和符号都以空格分隔。
输出格式:
将输入的数字和运算符按给定顺序分别压入堆栈 S1 和 S2,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 109。
如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。
输入样例 1:
540 5 8 3 2/ * - +
输出样例 1:
2
输入样例 2:
52 5 8 4 4* / - +
输出样例 2:
ERROR: 5/0
银行业务队列简单模拟
4、设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
输入格式:
输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。
输出格式:
按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。
输入样例:
8 2 1 3 9 4 11 13 15
输出样例:
1 3 2 9 11 4 13 15
实验原理与内容
实验原理:
顺序表的插入操作在于找准位置,循环移动元素,注意移动下标的边界问题
以下是给定位置插入,本题中思考参数还需要指定位置吗?
bool Insert( List L, ElementType X, int i )
{ Position j;if ( L->Last == MAXSIZE-1) {/* 表空间已满,不能插入 */printf("表满"); return false; } if ( i<1 || i>L->Last+2 ) { /* 检查插入位序的合法性:是否在1~n+1。n为当前元素个数,即Last+1 */printf("位序不合法");return false; } for( j=L->Last; j>=i-1; j-- ) /*Last指向序列最后元素 */L->Data[j+1] = L->Data[j]; /* 将位序i及以后的元素顺序向后移动 */L->Data[i-1] = X; /* 新元素插入第i位序,其数组下标为i-1 */L->Last++; /* Last仍指向最后元素 */return true;
}
链表不要求逻辑上相邻的两个数据元素物理上也相邻,它是通过“链”建立起数据元素之间的逻辑关系。因此对线性表的插入、删除不需要移动数据元素,只需要修改“链”。
堆栈
“堆栈(Stack)”可以认为是具有一定操作约束的线性表,插入和删除操作都作用在一个称为栈顶(Top)的端点位置。主要特点是“后进先出”(Last In First Out)。
队列
队列是一种限制在两端进行插入和删除的线性表。
【分析提示】
首先需要针对A和B业务设计两个循环队列,分别处理两类业务请求;然后根据输入序列整数的奇偶性将各个整数分配到这两个队列中。另外,需要设计针对两个队列处理过程的流程,这是一个循环。在循环中,先从A队列中输出两个元素,然后再从B队列输出一个元素。当发现某一队列为空时,输出另一个队列的所有元素。
【实现要点】
采用统一的循环队列函数处理两个队列的操作,注意对队列满、空情况的判断。
实验内容:
- 建立顺序表,并在顺序表上实现基本运算操作
- 已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序
3. 建立链表,并在链表上实现基本运算操作
4. 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3
5. 建立顺序栈,并在栈上实现基本运算操作
6. 实现栈在简易计算器的应用
7.建立循环队列,并在队列上实现基本运算操作
8.实现银行业务队列的简单模拟
实验过程与结果
每道题目都要写出以下三个步骤:
递增有序顺序表的插入
#include <stdio.h>
int main()
{int dz[200];int a,b,i,j;scanf("%d",&a);for(i=0;i<a;i++)scanf("%d",&dz[i]);scanf("%d",&b);dz[a]=b;for(i=a;i>0;i--) if(dz[i]<dz[i-1]){j=dz[i];dz[i]=dz[i-1];dz[i-1]=j; } for(i=0;i<a+1;i++)printf("%d,",dz[i]); return 0;
}
两个有序链表序列的交集
#include <stdio.h>
#include <stdlib.h>
struct Node
{int data;struct Node *next;
};
struct Node *build();
struct Node *operate(struct Node *a,struct Node *b);
int main()
{struct Node *a,*b,*c;a=build();b=build();c=operate(a,b);if(!c)printf("NULL\n");while(c){if(c->next==NULL)printf("%d",c->data);elseprintf("%d ",c->data);c=c->next;}
}
struct Node *build()
{int a;struct Node *head=NULL,*str=NULL;scanf("%d",&a);while(a!=-1){struct Node *p=(struct Node*)malloc(sizeof(struct Node));p->data=a;p->next=NULL;if(head==NULL)head=p;elsestr->next=p;str=p; scanf("%d",&a);}return head;
}
struct Node *operate(struct Node *a,struct Node *b)
{struct Node *head=NULL,*str=NULL;while(a&&b){if((a->data)<(b->data))a=a->next;else if((a->data)>(b->data))b=b->next;else if((a->data)==(b->data)){if(head==NULL)head=a;elsestr->next=a;str=a; a=a->next;b=b->next;str->next=NULL;//放在这里很重要,要先将a进至下一节点,防止直接将链表a中断}}return head;
}
简单计算器
#include<stdio.h>
int digit(int a,int b,char c)//计算操作
{if(c=='+')return a+b;if(c=='-')return a-b;if(c=='*')return a*b;if(c=='/'&&b==0)return -199;//如果出错就返回199;继续后续的ERROR打印if(c=='/')return a/b;else return 0;
}
int main()
{int n;scanf("%d",&n);int a[n];char b[n-1];for(int i=0;i<n;i++)scanf("%d",&a[i]);getchar();//要用getchar吸收空格和回车,一开始搞错了,找了很久的错误。for(int i=0;i<n-1;i++){scanf("%c",&b[i]);getchar(); }int sum=0;int p = n-2;//p是字符数组的下标,因为有n-1个元素,所以末尾元素是n-2for(int i=n-1;i>0;i--){ int tem = a[i-1];a[i-1] = digit(a[i-1],a[i],b[p]);//计算后两位,然后结果给到倒数第二位p--;if(a[i-1]==-199)//哎,等于-199说明错误啦,所以输出然后直接返回。tem是为了存i-1的数值//不然i-1就是-199啦,就会错的一塌糊涂。{printf("ERROR: %d/%d",tem,a[i]);return 0;}}printf("%d",a[0]);//全部计算完之后就只剩下a[0]啦
}
银行业务队列简单模拟
#include<iostream>
#include<queue>
using namespace std;
int N;
queue<int>A;
queue<int>B;
void Input() {cin >> N;int M;for (int i = 1; i <= N; i++) {cin >> M;if (M % 2 == 0) {B.push(M);}else {A.push(M);}}
}
void Printf() {int flag = 0;while (A.empty() != 1 && B.empty() != 1) {//当他们都不为空if (flag == 0) {cout <<A.front();flag++;}else {cout << " "<<A.front();}A.pop();if (A.empty() != 1) {cout << " "<<A.front();A.pop();}cout << " " << B.front();B.pop();}while (A.empty() == 1 && B.empty() != 1) {if (flag == 0) {cout <<B.front();flag++;}else {cout << " " << B.front();}B.pop();}while (A.empty() != 1 && B.empty() == 1) {if (flag == 0) {cout <<A.front();flag++;}else {cout << " " << A.front();}A.pop();}
}int main() {Input();Printf();}
相关文章:
线性表实验
实验目的与要求 实验目的: 线性表的逻辑结构特点和线性表抽象数据类型的描述方法线性表的两类存储结构设计方法以及各自的优缺点掌握线性表的基本知识深入理解、掌握并灵活运用线性表。熟练掌握线性表的存储结构及主要运算的实现掌握栈的定义、栈的逻辑结构特性和…...
003无重复字符的最长子串
(https://i-blog.csdnimg.cn/direct/352cc4217764458f9a1510c62f89a91e.png)(https://i-blog.csdnimg.cn/direct/14239305bb5a4d068f323de7afc14086.png)...
记录--uniapp 安卓端实现录音功能,保存为amr/mp3文件
🧑💻 写在开头 点赞 收藏 学会🤣🤣🤣 功能实现需要用到MediaRecorder、navigator.mediaDevices.getUserMedia、Blob等API,uniapp App端不支持,需要借助renderjs来实现 实现逻辑 通过naviga…...
前端生成docx文档、excel表格、图片、pdf文件
一、前端将页面某区域内容下载为word文档:html-to-docx、file-saver插件组合使用 import HTMLtoDOCX from html-to-docx; import { saveAs } from file-saver;const exportTest async () > {const fileBuffer await HTMLtoDOCX(<h2>文件标题</h2>&…...
c++---------流类
格式化输入(cin的格式化) 基本用法与控制符 在C中,std::cin用于从标准输入(通常是键盘)读取数据。它默认以空白字符(空格、制表符、换行符)为分隔符来读取不同的数据。例如,读取两个…...
3、基本复用原理和复用单元
基本复用原理 字节间插复用: SDH 采用字节间插复用方式来构建更高等级的信号。这是一种将低速率信号按字节为单位依次插入到高速率信号帧结构中的复用方法。例如,将多个 STM - 1 信号复用成 STM - 4 信号时,是把 4 个 STM - 1 信号的字节依次…...
Vue与React:前端框架的巅峰对决
文章目录 一、引言(一)前端框架发展现状简述 二、Vue 与 React 框架概述(一)Vue.js 简介(二)React.js 简介 三、开发效率对比(一)Vue 开发效率分析(二)React …...
Java 中的面向对象编程 (OOP) 概念
引言 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它通过将数据和操作封装在一起,形成一个称为“对象”的实体来组织代码。Java 是一种完全支持 OOP 的语言,广泛应用于企业级应用开发。本文将深入…...
十二月第20讲:Python中指数概率分布函数的绘图详解
一、指数分布的理论概述 1. 定义与公式 指数分布是一种描述随机变量在一个固定底数上的对数值的分布情况,或者在概率理论和统计学中,用于描述泊松过程中事件之间的时间间隔的概率分布。具体来说,它表示事件以恒定平均速率连续且独立地发生的…...
汽车IVI中控开发入门及进阶(44):杰发科智能座舱芯片
概述: 杰发科技自成立以来,一直专注于汽车电子芯片及相关系统的研发与设计。 产品布局: 合作伙伴: 杰发科技不断提升产品设计能力和产品工艺,确保产品达 到更高的质量标准。目前杰发科技已通过ISO9001质 量管理体系与CMMIL3认证。 杰发科技长期合作的供应商(芯片代工厂、…...
【py脚本+logstash+es实现自动化检测工具】
概述 有时候,我们会遇到需要查看服务器的网络连接或者内存或者其他指标是否有超时,但是每次需要登录到服务器查看会很不方便,所以我们可以设置一个自动脚本化工具自动帮助我们查看,下面我做了一个demo在windows上面。 一、py脚本 import s…...
Zookeeper的选举机制
Zookeeper的leader选举机制是基于ZAB(Zookeeper Atomic Broadcast)协议的,这是一种基于Paxos协议的变种,专门用于Zookeeper的分布式协调服务。 选举过程主要分为以下几个阶段: 1.初始化阶段 当一个新的Zookeeper服…...
2024-05-18 前端模块化开发——ESModule模块化
目录 1、认识 ES Module2、ES Module基本使用3、export关键字 3.1、导出方式一——直接导出3.2、导出方式二——通过as起别名3.3、导出方式三——定义的时候就直接导出 4、import关键字 4.1、导入方式一——直接导入4.2、导入方式二——通过as起别名4.3、导入方式三——可以给…...
Linux IPV6 地址配置 | IPv6 禁用 | ping6 过程细节剖析 | IPv6 排障
注: 本文为 “Linux IPV6 地址配置 | IPv6 禁用 | ping6 过程细节剖析 | IPv6 排障” 相关文章合辑。 Linux 服务器设备上配置 IPV6 地址方法 aischang 于 2018-08-25 12:56:25 发布 1. 手动执行命令配置: ifconfig em1 inet6 add 8888::a7/96 up2. 删…...
【YashanDB知识库】XMLAGG方法的兼容
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802943.html?templateId1718516 【关键字】 XMLAGG方法的兼容 【问题描述】 崖山数据库不支持将XMLAGG相关的函数内容,需要替换成支持的功能函数WM_CONCAT(T.COLUMN_NAME…...
echarts加载区域地图,并标注点
效果如下,加载了南海区域的地图,并标注几个气象站点; 1、下载区域地图的JSON:DataV.GeoAtlas地理小工具系列 新建nanhai.json,把下载的JSON数据放进来 说明:如果第二步不打勾,只显示省的名字&a…...
echarts画风向杆
1.安装echarts 2.引入echarts 4.获取数据,转换数据格式 windProfile.title.text ${moment(time.searchTime[0], ‘YYYY-MM-DD HH:mm:ss’).format( ‘YYYY-MM-DD HH:mm’ )}-${moment(time.searchTime[1], ‘YYYY-MM-DD HH:mm:ss’).format(‘YYYY-MM-DD HH:mm’)…...
【LeetCode每日一题】LeetCode 345.反转字符串中的元音字母
LeetCode 345.反转字符串中的元音字母 题目描述 给定一个字符串 s,你需要反转字符串中所有的元音字母,并返回新的字符串。 元音字母是 a, e, i, o, u,这些字母的大小写都会被考虑。 示例 1: 输入: s "hello" 输出: "holle…...
蓝桥杯练习生第四天
小蓝每天都锻炼身体。 正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。 小蓝跑步已经坚持了很长时间&#x…...
cesium 常见的 entity 列表
Cesium 是一个用于创建3D地球和地图的开源JavaScript库。它允许开发者在Web浏览器中展示地理空间数据,并且支持多种类型的空间实体(entities)。 Entities是Cesium中用于表示地面上或空中的对象的一种高层次、易于使用的接口。它们可以用来表示点、线、多边形、模型等,并且可…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...
【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...
