浙大数据结构:02-线性结构4 Pop Sequence

2024-09-08 01:36

本文主要是介绍浙大数据结构:02-线性结构4 Pop Sequence,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这道题我们采用数组来模拟堆栈和队列。
简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop
机翻

1、条件准备

stk是栈,que是队列。
tt指向的是栈中下标,front指向队头,rear指向队尾。
初始化栈顶为0,队头为0,队尾为-1
#include<iostream>
using namespace std;#define MAXSIZE 1010
#define ERROR -1int stk[MAXSIZE],tt=0;
int que[MAXSIZE],front=0,rear=-1;
主函数加快cin,cout,将解决问题的步骤用solve()来实现

int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);solve();return 0;
}

2、solve函数

先输入栈的最大空间,每组数据个数,有多少组。
将具体解决方法放入judge函数写,该函数会判断并输出yes,no
到下一组前要清空栈和队列。
void  solve()
{int stksize,squsize,num;cin>>stksize>>squsize>>num;while(num--){ judge(stksize,squsize);
//传栈最大空间,每组数据长度tt=0;front=0,rear=-1;}}

3、judge函数

flag是判断最后该输出yes还是no
从1到squsize遍历,因为栈是按这个顺序放元素的,每次遍历入栈,并读一个数据到队列。
如果栈空间超过stksize了,则输出NO
如果队头元素与栈顶元素匹配,则pop
遍历完后看看队列还有没有没匹配的,有的话与栈中元素匹配,这时栈顶必须与队头匹配,不匹配则为NO
void judge(int stksize, int squsize)
{int flag = 1;//标记是yes还是nofor (int i = 1; i <= squsize; i++){ stk[++tt] = i;   //放入栈中cin >> que[++rear];   //读取数据if (tt > stksize)   //栈空间超出限制flag = 0;while (tt && stk[tt] == que[front]){   //栈顶与队头元素匹配,poptt--;front++;}}while (front <= rear){  //最后剩余栈中的元素进行匹配if (stk[tt] != que[front])   flag = 0;tt--, front++;}if (flag)  //输出cout << "YES" << endl;elsecout << "NO" << endl;
}

4、总结

用数组模拟栈队列在写算法题中也是常用的,因为结构体没数组这样找快。
当然这道题也可以写成栈与队列结构体的形式,只需把其中某些代码改动即可。
完整代码如下:
#include <iostream>
using namespace std;#define MAXSIZE 1010
#define ERROR -1int stk[MAXSIZE], tt = 0;
int que[MAXSIZE], front = 0, rear = -1;void judge(int stksize, int squsize)
{int flag = 1;for (int i = 1; i <= squsize; i++){stk[++tt] = i;cin >> que[++rear];if (tt > stksize)flag = 0;while (tt && stk[tt] == que[front]){tt--;front++;}}while (front <= rear){if (stk[tt] != que[front])   flag = 0;tt--, front++;}if (flag)cout << "YES" << endl;elsecout << "NO" << endl;
}void solve()
{int stksize, squsize, num;cin >> stksize >> squsize >> num;while (num--){judge(stksize, squsize);tt = 0;front = 0, rear = -1;}
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);solve();return 0;
}

这篇关于浙大数据结构:02-线性结构4 Pop Sequence的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146746

相关文章

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus