当前位置: 首页 > news >正文

线性表实验

实验目的与要求

实验目的:

  1. 线性表的逻辑结构特点和线性表抽象数据类型的描述方法
  2. 线性表的两类存储结构设计方法以及各自的优缺点
  3. 掌握线性表的基本知识
  4. 深入理解、掌握并灵活运用线性表。
  5. 熟练掌握线性表的存储结构及主要运算的实现
  6. 掌握栈的定义、栈的逻辑结构特性和栈的基本运算。
  7. 理解栈在表达式求值中的应用。
  8. 掌握队列的定义、队列的逻辑结构特性和栈的基本运算。
  9. 理解队列的应用。

实验要求:

编程实现如下功能:

递增有序顺序表的插入

1、已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序。

输入格式:

1行输入顺序表长度,第2行输入递增有序的顺序表,第3行输入要插入的数据元素X

输出格式

对每一组输入,在一行中输出插入X后的递增的顺序表。

  两个有序链表序列的交集

2、已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。

输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL

简单计算器

3、本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1 存放数字,另一个堆栈 S2存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:

  1. 从 S​1​​ 中弹出两个数字,顺序为 n​1​​ 和 n​2​​;
  2. 从 S​2​​ 中弹出一个运算符 op;
  3. 执行计算 n​2​​ op n​1​​;
  4. 将得到的结果压回 S​1​​。

直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。

输入格式:

输入首先在第一行给出正整数 N1<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、设某银行有AB两个业务窗口,且处理业务的速度不一样,其中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队列输出一个元素。当发现某一队列为空时,输出另一个队列的所有元素。

【实现要点】

采用统一的循环队列函数处理两个队列的操作,注意对队列满、空情况的判断。

实验内容:

  1. 建立顺序表,并在顺序表上实现基本运算操作
  2. 已知顺序表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();}

相关文章:

线性表实验

实验目的与要求 实验目的&#xff1a; 线性表的逻辑结构特点和线性表抽象数据类型的描述方法线性表的两类存储结构设计方法以及各自的优缺点掌握线性表的基本知识深入理解、掌握并灵活运用线性表。熟练掌握线性表的存储结构及主要运算的实现掌握栈的定义、栈的逻辑结构特性和…...

003无重复字符的最长子串

(https://i-blog.csdnimg.cn/direct/352cc4217764458f9a1510c62f89a91e.png)(https://i-blog.csdnimg.cn/direct/14239305bb5a4d068f323de7afc14086.png)...

记录--uniapp 安卓端实现录音功能,保存为amr/mp3文件

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 功能实现需要用到MediaRecorder、navigator.mediaDevices.getUserMedia、Blob等API&#xff0c;uniapp App端不支持&#xff0c;需要借助renderjs来实现 实现逻辑 通过naviga…...

前端生成docx文档、excel表格、图片、pdf文件

一、前端将页面某区域内容下载为word文档&#xff1a;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++---------流类

格式化输入&#xff08;cin的格式化&#xff09; 基本用法与控制符 在C中&#xff0c;std::cin用于从标准输入&#xff08;通常是键盘&#xff09;读取数据。它默认以空白字符&#xff08;空格、制表符、换行符&#xff09;为分隔符来读取不同的数据。例如&#xff0c;读取两个…...

3、基本复用原理和复用单元

基本复用原理 字节间插复用&#xff1a; SDH 采用字节间插复用方式来构建更高等级的信号。这是一种将低速率信号按字节为单位依次插入到高速率信号帧结构中的复用方法。例如&#xff0c;将多个 STM - 1 信号复用成 STM - 4 信号时&#xff0c;是把 4 个 STM - 1 信号的字节依次…...

Vue与React:前端框架的巅峰对决

文章目录 一、引言&#xff08;一&#xff09;前端框架发展现状简述 二、Vue 与 React 框架概述&#xff08;一&#xff09;Vue.js 简介&#xff08;二&#xff09;React.js 简介 三、开发效率对比&#xff08;一&#xff09;Vue 开发效率分析&#xff08;二&#xff09;React …...

Java 中的面向对象编程 (OOP) 概念

引言 面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;是一种编程范式&#xff0c;它通过将数据和操作封装在一起&#xff0c;形成一个称为“对象”的实体来组织代码。Java 是一种完全支持 OOP 的语言&#xff0c;广泛应用于企业级应用开发。本文将深入…...

十二月第20讲:Python中指数概率分布函数的绘图详解

一、指数分布的理论概述 1. 定义与公式 指数分布是一种描述随机变量在一个固定底数上的对数值的分布情况&#xff0c;或者在概率理论和统计学中&#xff0c;用于描述泊松过程中事件之间的时间间隔的概率分布。具体来说&#xff0c;它表示事件以恒定平均速率连续且独立地发生的…...

汽车IVI中控开发入门及进阶(44):杰发科智能座舱芯片

概述: 杰发科技自成立以来,一直专注于汽车电子芯片及相关系统的研发与设计。 产品布局: 合作伙伴: 杰发科技不断提升产品设计能力和产品工艺,确保产品达 到更高的质量标准。目前杰发科技已通过ISO9001质 量管理体系与CMMIL3认证。 杰发科技长期合作的供应商(芯片代工厂、…...

【py脚本+logstash+es实现自动化检测工具】

概述 有时候&#xff0c;我们会遇到需要查看服务器的网络连接或者内存或者其他指标是否有超时&#xff0c;但是每次需要登录到服务器查看会很不方便,所以我们可以设置一个自动脚本化工具自动帮助我们查看&#xff0c;下面我做了一个demo在windows上面。 一、py脚本 import s…...

Zookeeper的选举机制

Zookeeper的leader选举机制是基于ZAB&#xff08;Zookeeper Atomic Broadcast&#xff09;协议的&#xff0c;这是一种基于Paxos协议的变种&#xff0c;专门用于Zookeeper的分布式协调服务。 选举过程主要分为以下几个阶段&#xff1a; 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 排障

注&#xff1a; 本文为 “Linux IPV6 地址配置 | IPv6 禁用 | ping6 过程细节剖析 | IPv6 排障” 相关文章合辑。 Linux 服务器设备上配置 IPV6 地址方法 aischang 于 2018-08-25 12:56:25 发布 1. 手动执行命令配置&#xff1a; ifconfig em1 inet6 add 8888::a7/96 up2. 删…...

【YashanDB知识库】XMLAGG方法的兼容

本文内容来自YashanDB官网&#xff0c;原文内容请见 https://www.yashandb.com/newsinfo/7802943.html?templateId1718516 【关键字】 XMLAGG方法的兼容 【问题描述】 崖山数据库不支持将XMLAGG相关的函数内容&#xff0c;需要替换成支持的功能函数WM_CONCAT(T.COLUMN_NAME…...

echarts加载区域地图,并标注点

效果如下&#xff0c;加载了南海区域的地图&#xff0c;并标注几个气象站点&#xff1b; 1、下载区域地图的JSON&#xff1a;DataV.GeoAtlas地理小工具系列 新建nanhai.json&#xff0c;把下载的JSON数据放进来 说明&#xff1a;如果第二步不打勾&#xff0c;只显示省的名字&a…...

echarts画风向杆

1.安装echarts 2.引入echarts 4.获取数据&#xff0c;转换数据格式 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&#xff0c;你需要反转字符串中所有的元音字母&#xff0c;并返回新的字符串。 元音字母是 a, e, i, o, u&#xff0c;这些字母的大小写都会被考虑。 示例 1: 输入: s "hello" 输出: "holle…...

蓝桥杯练习生第四天

小蓝每天都锻炼身体。 正常情况下&#xff0c;小蓝每天跑 11 千米。如果某天是周一或者月初&#xff08;11 日&#xff09;&#xff0c;为了激励自己&#xff0c;小蓝要跑 22 千米。如果同时是周一或月初&#xff0c;小蓝也是跑 22 千米。 小蓝跑步已经坚持了很长时间&#x…...

cesium 常见的 entity 列表

Cesium 是一个用于创建3D地球和地图的开源JavaScript库。它允许开发者在Web浏览器中展示地理空间数据,并且支持多种类型的空间实体(entities)。 Entities是Cesium中用于表示地面上或空中的对象的一种高层次、易于使用的接口。它们可以用来表示点、线、多边形、模型等,并且可…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值&#xff0c;以达到平滑&#xff08;去噪&#xff09;、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算&#xff0c;…...