线性表实验
实验目的与要求
实验目的:
- 线性表的逻辑结构特点和线性表抽象数据类型的描述方法
- 线性表的两类存储结构设计方法以及各自的优缺点
- 掌握线性表的基本知识
- 深入理解、掌握并灵活运用线性表。
- 熟练掌握线性表的存储结构及主要运算的实现
- 掌握栈的定义、栈的逻辑结构特性和栈的基本运算。
- 理解栈在表达式求值中的应用。
- 掌握队列的定义、队列的逻辑结构特性和栈的基本运算。
- 理解队列的应用。
实验要求:
编程实现如下功能:
递增有序顺序表的插入
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中用于表示地面上或空中的对象的一种高层次、易于使用的接口。它们可以用来表示点、线、多边形、模型等,并且可…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...