西农数据结构第二次实习题目参考

T1

用顺序存储实现栈的初始化、入栈、出栈、取栈顶、判栈空操作。调用以上操作实现判断从键盘输入的括号序列是否匹配

输入描述

括导序列#(#为括号输入结束符号)

输出描述

匹配或不匹配

输入

{[()]}#

输出

匹配

#include <iostream>
using namespace std;
const int MAX_SIZE = 100;
class Stack {
private:char data[MAX_SIZE];int top;
public:Stack() {top = -1;}void init() {top = -1;}bool push(char item) {if (top == MAX_SIZE - 1) {return false;}data[++top] = item;return true;}char pop() {if (top == -1) {return '\0';}return data[top--];}char peek() {if (top == -1) {return '\0';}return data[top];}bool isEmpty() {return top == -1;}
};
bool isMatchingBrackets(string input) {Stack stack;stack.init();for (char c : input) {if (c == '(' || c == '[' || c == '{') {stack.push(c);}else if (c == ')' || c == ']' || c == '}') {if (stack.isEmpty()) {return false;}char top = stack.pop();if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {return false;}}else if (c == '#') {break;}}return stack.isEmpty();
}
int main() {string input;cin >> input;if (isMatchingBrackets(input)) {cout << "匹配" << endl;}else {cout << "不匹配" << endl;}return 0;
}

T2

患者到医院看病的顺序是,先排队等候,再看病治疗。要求设计个算法,模拟病人等候就诊的过程。其中:“病人到达"用命令“A”(或"a")表示,"护士让下一位就诊”用"N”(或"n")表示,“不再接收病人排队"用“S”(或“s”)表示,

输入描述

A(或a)病历号

N(或n)

S(或s)

X(其他字符)

输出描述

病历号为x的病人就诊

若队列中有数据,输出队首元素,否则输出“无病人就诊”

不再接收病人排队,并输出当前队列中所有病历号

输入命令不合法!

输入

A

123

n

n

a

124

A

125

X

S

输出

病历号为123的病人就诊

无病人就诊

输入命令不合法!

今天不再接收病人排队,下列排队的病人依次就诊:124 125

#include <iostream>
#include <cstring>
using namespace std;
const int MAX_SIZE = 100;
class PatientQueue {
private:int data[MAX_SIZE];int front;int rear;
public:PatientQueue() {front = rear = -1;}bool isEmpty() {return front == -1;}bool isFull() {return (rear + 1) % MAX_SIZE == front;}void enqueue(int patientNumber) {if (isFull()) {cout << "队列已满,无法加入新病人。" << endl;return;}if (isEmpty()) {front = rear = 0;}else {rear = (rear + 1) % MAX_SIZE;}data[rear] = patientNumber;}int dequeue() {if (isEmpty()) {cout << "无病人就诊" << endl;return -1;}int patientNumber = data[front];if (front == rear) {front = rear = -1;}else {front = (front + 1) % MAX_SIZE;}return patientNumber;}void printQueue() {if (isEmpty()) {cout << "当前队列中无病人。" << endl;return;}cout << "今天不再接收病人排队,下列排队的病人依次就诊:";int index = front;while (index != rear) {cout << data[index] << " ";index = (index + 1) % MAX_SIZE;}cout << data[index] << endl;}
};
int main() {PatientQueue queue;char command;int patientNumber;while (true) {cin >> command;if (command == 'A' || command == 'a') {cin >> patientNumber;queue.enqueue(patientNumber);}else if (command == 'N' || command == 'n') {int patient = queue.dequeue();if (patient != -1) {cout << "病历号为" << patient << "的病人就诊" << endl;}}else if (command == 'S' || command == 's') {queue.printQueue();break;}else {cout << "输入命令不合法!" << endl;}}return 0;
}

T3

迷宫是一个二维矩阵,其中1为墙,0为路,3为入口,4为出口.要求从入口开始,从出口结束,按照 下,左,上,右 的顺序来搜索路径

输入描述

迷宫宽度W 迷宫高度h

迷宫第一行

迷宫第二行

迷宫第n行

输出描述

入口横坐标1 入口纵坐标1

横坐标2 纵坐标2

横坐标3 纵坐标3

横坐标4 纵坐标4

横坐标n-1 纵坐标n-1

出口横坐标n 出口纵坐标n

输入

8 10

1 1 1 1 1 1 1 1

1 0 1 1 0 1 0 1

1 0 1 0 0 1 0 1

1 1 0 3 1 0 1 1

1 0 0 1 0 0 4 1

1 0 0 0 0 1 1 1

1 0 1 0 0 1 0 1

1 0 1 0 0 0 1 1

1 1 1 1 0 0 0 1

1 1 1 1 1 1 1 1

输出

3 3

2 3

2 4

2 5

3 5

3 6

3 7

4 7

4 6

4 5

4 4

5 4

6 4

#include <iostream>
#include <list>
using namespace std;struct PosInfo {int px, py;PosInfo(int x, int y) { px = x; py = y; }
};class MG {char** S;int w, h;int in_x, in_y, out_x, out_y;list<PosInfo> s;public:MG(int w, int h) {this->w = w;this->h = h;this->S = new char* [h];for (int i = 0; i < h; i++) {this->S[i] = new char[w];}for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {cin >> S[i][j];if (S[i][j] == '3') {in_y = j;in_x = i;}if (S[i][j] == '4') {out_x = i;out_y = j;}}}seekPath(in_x, in_y); }bool could(int x, int y){return (S[x][y] != '*' && S[x][y] != '1');}bool seekPath(int x, int y) {s.push_front(PosInfo(y, x));if (x == out_x && y == out_y) {if (s.empty()) { cout << "列表为空" << endl; return false; }while (!s.empty()) {cout << s.back().px << " " << s.back().py << endl;s.pop_back();}return true;}if (could(x, y)) {S[x][y] = '1';if (seekPath(x + 1, y)) return true;if (seekPath(x, y - 1)) return true;if (seekPath(x - 1, y)) return true;if (seekPath(x, y + 1)) return true;}s.pop_front();return false;}~MG() {for (int i = 0; i < h; i++) {delete[] S[i];}delete[] S;}
};int main() {int w, h;cin >> w >> h;MG m1(w, h);return 0;
}

T4

设计一个算法找一条从迷宫入口到出口的最短路径

输入描述

迷宫的行和列m n

迷宫的布局

输出描述

最小路径

输入

6 8

0 1 1 1 0 1 1 1

1 0 1 0 1 0 1 0

0 1 0 0 1 1 1 1

0 1 1 1 0 0 1 1

1 0 0 1 1 0 0 0

0 1 1 0 0 1 1 0

输出

(6,8)

(5,7)

(4,6)

(4,5)

(3,4)

(3,3)

(2,2)

(1,1)

#include <iostream>
#include <list>
#include <queue>
#include <vector>
using namespace std;struct Point {int x, y;Point(int x, int y) : x(x), y(y) {}
};class MG {int m, n;int** S;vector<Point> path; vector<vector<bool>> visited; public:MG(int m, int n) {this->m = m;this->n = n;S = new int* [m];for (int i = 0; i < m; i++) {S[i] = new int[n];}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cin >> S[i][j];}}visited.resize(m, vector<bool>(n, false));searchPath();printPath();}bool could(int x, int y) {return (x >= 0 && x < m && y >= 0 && y < n && S[x][y] == 0 && !visited[x][y]);}void searchPath() {queue<pair<Point, vector<Point>>> q;q.push({ Point(0, 0), {Point(0, 0)} });visited[0][0] = true;vector<pair<int, int>> directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, -1}, {1, 1}, {-1, -1}, {-1, 1} };while (!q.empty()) {auto current = q.front();q.pop();Point point = current.first;vector<Point> currentPath = current.second;if (point.x == m - 1 && point.y == n - 1) {path = currentPath; return;}for (auto dir : directions) {int newX = point.x + dir.first;int newY = point.y + dir.second;if (could(newX, newY)) {visited[newX][newY] = true;vector<Point> newPath = currentPath;newPath.push_back(Point(newX, newY));q.push({ Point(newX, newY), newPath });}}}}void printPath() {for (int i = path.size() - 1; i >= 0; --i) {cout << "(" << path[i].x + 1 << "," << path[i].y + 1 << ") " << endl;}}~MG() {for (int i = 0; i < m; i++) {delete[] S[i];}delete[] S;}
};int main() {int m, n;cin >> m >> n;MG m1(m, n);return 0;
}

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

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

相关文章

松脂醇-落叶松脂素还原酶(pinoresinol-lariciresinol reductase, PLR)克隆与鉴定-文献精读71

菘蓝中松脂醇-落叶松脂素还原酶编码基因IiPLR2的克隆与功能分析 摘要 松脂醇-落叶松脂素还原酶(pinoresinol-lariciresinol reductase, PLR)是植物中木脂素生物合成的关键酶&#xff0c;能连续催化两步反应分别生成落叶松脂素和开环异落叶松脂素。落叶松脂素等木脂素类成分是…

Unity SpriteEditor 中的图集处理功能

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 因为unity不只能做3d&#xff0c;还有2d游戏需要大量编辑处理图片素材&#xff0c;所以需要了解Sprite&#xff08;精灵&…

KPaaS 集成平台低代码在跨境电商行业的应用

在全球化的经济浪潮中&#xff0c;跨境电商行业蓬勃发展&#xff0c;机遇与挑战并存。随着业务规模的不断扩大和市场竞争的日益激烈&#xff0c;跨境电商企业面临着诸多复杂的业务管理和技术难题。KPaaS 业务集成扩展平台以其低代码的创新特性&#xff0c;为跨境电商行业带来了…

头歌——人工智能(机器学习 --- 决策树2)

文章目录 第5关&#xff1a;基尼系数代码 第6关&#xff1a;预剪枝与后剪枝代码 第7关&#xff1a;鸢尾花识别代码 第5关&#xff1a;基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征&#xff0c;信息增益大的优先选择。在C4.5算法中&#xff0c;采用了信息增益率…

银河麒麟相关

最近安装了银河麒麟server版本&#xff0c;整理下遇到的一些小问题 1、vmware安装Kylin-Server-V10-SP3-General-Release-2303-X86_64虚拟机完成后&#xff0c;桌面窗口很小&#xff0c;安装vmwaretools后解决&#xff0c;下载地址http://softwareupdate.vmware.com/cds/vmw-de…

leetcode-71-简化路径

题解&#xff1a; 1、以"/"作为分隔符对字符串进行分割得到数组names; 2、初始化一个栈stack&#xff08;python中的栈使用列表实现&#xff09;&#xff1b; 3、遍历数组names&#xff1b;如果当前元素为".."且栈不为空&#xff0c;则将弹出栈顶元素&a…

网络安全行业10大副业汇总,总有一个适合你

网络安全行业这10大副业汇总 总有一个适合你 引言 在当今的网络安全行业中&#xff0c;除了全职工作外&#xff0c;许多师傅还通过副业来增加收入、不断拓展自身技能&#xff0c;并积累更多实际操作经验&#xff0c;为职业发展增添了无限可能。 本文提供了10种适合各种类型…

Android13关于获取外部存储文件的相关问题及解决方案记录

Android的学习路上... 测试设备&#xff1a;vivo X90s安卓版本&#xff1a; Android13开发环境&#xff1a;AndroidStudio FlamingoSDK&#xff1a;33 最近我在Android13的环境下尝试写一个文件选择器&#xff0c;以便日后的开发使用。但是我们知道&#xff0c;从Android13 (A…

django restful API

文章目录 项目地址一、django环境安装以及初识restful1.1 安装python 3.10的虚拟环境1.2 创建django工程文件1.3 创建一个book app1.4 序列化(Django JsonResponse)1.4.1创建一个Models1.4.2 创建django的超级用户admin1.4.3 添加serializers.py生成序列化器1.5 FBV创建视图1…

用docker Desktop 下载使用thingsboard/tb-gateway

1、因为正常的docker pull thingsboard/tb-gateway 国内不行了&#xff0c;所以需要其它工具来下载 2、在win下用powershell管理员下运行 docker search thingsboard/tb-gateway 可以访问到了 docker pull thingsboard/tb-gateway就可以下载了 3、docker Desktop就可以看到…

ComfyUI初体验

ComfyUI 我就不过多介绍了&#xff0c;安装和基础使用可以看下面大佬的视频&#xff0c;感觉自己靠图文描述的效果不一定好&#xff0c;大家看视频比较方便。 ComfyUI全球爆红&#xff0c;AI绘画进入“工作流时代”&#xff1f;做最好懂的Comfy UI入门教程&#xff1a;Stable D…

分布式ID生成策略

文章目录 分布式ID必要性1.UUID2.基于DB的自增主键方案3.数据库多主模式4.号段模式5.Redis6.Zookeeper7.ETCD8.雪花算法9.百度(Uidgenerator)10.美团(Leaf)11.滴滴(TinyID) 分布式ID必要性 业务量小于500W的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分…

nuScenes数据集使用的相机的外参和内参

因为需要用不同数据集测试对比效果&#xff0c;而一般的模型代码里实现的检测结果可视化都是使用open3d的Visualizer在点云上画的3d框&#xff0c;展示出来的可视化效果很差&#xff0c;可能是偷懒&#xff0c;没有实现将检测结果投影到各相机的图像上&#xff0c;所以检测效果…

[ARM-2D 专题]4. 快速搭建ARM2D的PC仿真开发环境及避坑手法

有几种情况你需要使用pc仿真开发环境&#xff1a; 手上没有合适的硬件条件只想快速的了解一下ARM-2D开发过程中&#xff0c;加速开发过程&#xff0c;避免频繁的下载代码 无论如何&#xff0c;pc仿真开发环境&#xff0c;你都值得拥有。 第一步&#xff0c;先下载源代码&#…

基于ElementPlus的Form组件封装

前言 我们在项目开发过程中遇到最多就是表单页面的开发&#xff0c;那么使用频率比较高的就是Form组件&#xff0c;无论是vue亦或者是react&#xff0c;我们在项目中使用到UI库都会有Form组件。多数情况下都是用到了Form组件&#xff0c;我们先根据UI库或者其他类似的页面直接…

h5页面与小程序页面互相跳转

小程序跳转h5页面 一个home页 /pages/home/home 一个含有点击事件的元素&#xff1a;<button type"primary" bind:tap"toWebView">点击跳转h5页面</button>toWebView(){ wx.navigateTo({ url: /pages/webview/webview }) } 一个webView页 /pa…

物联网行业应用实训室建设方案

一、建设背景 随着物联网技术的迅猛发展和广泛应用&#xff0c;物联网产业已跃升为新时代的经济增长引擎&#xff0c;对于产业升级和社会信息化水平的提升具有举足轻重的地位。因此&#xff0c;为了满足这一领域的迫切需求&#xff0c;培养具备物联网技术应用能力的优秀人才成…

自动发现-实现运维管理自动化

nVisual-Discovery是一款自动化工具软件&#xff0c;通过多种自动发现技术&#xff0c;协助运维管理人员快速建立可视化的网络文档&#xff0c;提升网络管理的效率与准确性。 01 IP扫描发现 当我们新接手一个网络运维项目&#xff0c;通常缺乏精准的网络文档数据&#xff0c;…

4.2-6 使用Hadoop WebUI

文章目录 1. 查看HDFS集群状态1.1 端口号说明1.2 用主机名访问1.3 主节点状态1.4 用IP地址访问1.5 查看数据节点 2. 操作HDFS文件系统2.1 查看HDFS文件系统2.2 在HDFS上创建目录2.3 上传文件到HDFS2.4 删除HDFS文件和目录 3. 查看YARN集群状态4. 实战总结 1. 查看HDFS集群状态 …

Docker部署MySQL主从复制

1. 主从复制概念及优势 1.1 概念 MySQL主从复制是一种数据库复制技术&#xff0c;它允许将一个数据库服务器&#xff08;主服务器&#xff09;上的数据更改复制到一个或多个数据库服务器&#xff08;从服务器&#xff09;。这种技术在数据库管理和维护中扮演着重要的角色&…