题解:把每一步计算的答案再存在栈里面,直到计算结束. 如果是操作数 那么直接入栈:如果是运算符,那么把栈里面最顶部的两个操作数拿出来进行运算,运算结果再放入到栈里面,计算完所有的(#之前的长度位len- 1)就可以了. #include <bits/stdc++.h> using namespace std; typedef long long ll; int a[10005]; char s[20005]; int main() { int i,j,k,top; while(~scanf(&…
数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. Input 输入一个算术表达式的后缀式字符串,以'#'作为结束标志. Output 求该后缀式所对应的算术表达式的值,并输出之. Sample Input 59*684/-3*+# Sample Output 57 Hint 基本操作数都是一…
数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=100000)个整数的序列,对于序列中的每一元素,在序列中查找其位置之后第一个大于它的值,如果找到,输出所找到的值,否则,输出-1. Input 输入有多组,第一行输入t(1<=t<=10),表示输入的组数: 以后是 t 组输入:每组先输入n,表示本组序列的元素个数,之后依次输入本组的n个元素. O…
#include <bits/stdc++.h> using namespace std; int a[1005]; int main() { int t,n,i,j; while(~scanf("%d",&t)) { while(t--) { scanf("%d",&n); for( i = 1; i <= n; i ++) { scanf("%d", &a[i]); } for( i = 1; i &…
数据结构实验之栈与队列十一:refresh的停车场 Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆.现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表示车牌号为num的车辆要进入停车场或便道, Del 表示停车场中出去了一辆车,Out 表示便道最前面的车…
数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆.现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表…
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数. Input 第一行一个整数T 表示有T 组测试数据.(T <= 110) 对于每组测试数据: 第一行两个整数n, m,表示迷宫有n * m 个格子.(1…
数据结构实验之栈与队列九:行编辑器 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区. 由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,"每接受一个字符即存入用户数据区"的做法显然不是最恰当的.较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区.允许用户输入出差错,并在发现有…
数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. Input 首先输入整数t(1 <= t <= 10),代表测试的组数,以后是 t 组输入. 对于每组测试数据,第一行输入两个正整数 m(1 <= m &…
数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次.输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列. 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个出栈序列,但4,3,5,1,2就不可能是该序列的出栈序列.假设压入栈…
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. Input 输入数据有多组,处理到文件结束. Output 如果匹配就输出"yes",不匹配输出"no" Sample Input sin(20+10) {[}] Sa…
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. Input 输入一个算术表达式,以'#'字符作为结束标志. Output 输出该表达式转换所得到的后缀式. Sample Input a*b+(c-d/e)*f# Sample Output ab*cde/-f*+ 在做这道题之前首先要了解什么是后缀…
数据结构实验之栈与队列一:进制转换 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入一个十进制非负整数,将其转换成对应的 R (2 <= R <= 9) 进制数,并输出. Input 第一行输入需要转换的十进制非负整数: 第二行输入 R. Output 输出转换所得的 R 进制数. Sample Input 1279 8 Sample Output 2377 这题考了栈的进栈与出栈,其他的就是进制转换的模板了,…
#include <bits/stdc++.h> using namespace std; int a[1000006]; int b[1000006]; int sta[100006]; int main() { int t,n,i,j,top; while(~scanf("%d",&t)) { while(t--) { scanf("%d",&n); for( i = 1; i <= n; i ++) { scanf("…
#include <bits/stdc++.h> using namespace std; typedef long long ll; char s[100]; char a[100]; int main() { int i,j,k,f,top,len; while(gets(s) != '\0') { len = strlen(s); top = 0; f = 0; for(i = 0; i < len; i ++) { if(s[i] == ')') { if(top == 0) {…
题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; int ok(char ch, char sh) { if(sh == '(')return 1; if((ch == '*' || ch == '/' || ch == '%') && (sh == '+' || sh =='-')) return 1; else return -1; } int main() { int i =…
题目链接 题解: 特判一下n==0的时候. #include <bits/stdc++.h> using namespace std; int a[1000]; int main() { int top = 0; int n,r; scanf("%d",&n); scanf("%d",&r); if(n == 0) printf("0"); while(n) { a[top++] = n%r; n = n / r; }…
数据结构实验之栈三:后缀式求值 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值. 输入 输入一个算术表达式的后缀式字符串,以‘#’作为结束标志. 输出 求该后缀式所对应的算术表达式的值,并输出之. 示例输入 59*684/-3*+# 示例输出 57 提示 基本操作数都是一位正整数!      代码: #include <stdio.h>…
数据结构实验之栈:行编辑器 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区.   由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的.较好的做 法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区.允许用户输入出差错,并在发现有误时可以及时更正.例…
Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应用中作为数据记录.它们常用于记录那些对应于现实世界的对象和活动的数据,如职员档案等,这些结构便于数据的访问:它们易于进行插入.删除和查找特定数据项的操作. 然而,本篇要讲解的数据结构和算法更多的是作为程序员的工具来运用.它们主要作为构思算法的辅助工具,而不是完全的数据存储工具.这些数据结构的生命周期…
一:栈 栈和队列也是线性结构,线性表.栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制.栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以,把栈和队列称为操作受限的线性表. 1:栈的定义及基本运算 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入.删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,叫栈底(Bottom).当栈中没有数据元素时叫…
1 栈 1.1 栈的基本概念 栈(stack)又名堆栈,它是一种 运算受限的线性表.限定 仅在表尾进行插入和删除操作 的线性表.表尾被称为栈顶,相对地,把另一端称为栈底. 1.1.1 特点 它的特殊之处在于限制了这个线性表的插入和删除的位置,它始终只在栈顶进行.这也就使得:栈底是固定的,最先进栈的只能在栈底. 1.2 栈的常用操作 创建栈 销毁栈 清空栈 进栈 出栈 获取栈顶元素 获取栈的大小 1.2.1 栈的抽象数据类型 ADT 栈(stack) Data 通线性表.元素具有相同的类型,相邻的…
先是普通的数组做法 #include<stdio.h> #include<string.h> int main() { ] ; while(~scanf("%s",ch)) { ] ; ;//底下用于判断数组里是否是空 int len = strlen(ch) ; ; i <= len- ; i++) { if(ch[i]!='#'&&ch[i]!='@') sh[++top] = ch[i] ; )//判断#前边是否是无字符情况 { sh…
最近刷剑指offer,看到两道编程题,考察在O(1)的复杂度内,找出最值. 觉得很有意思,很有借鉴意义,故记录在此. 需要注意的是,这里所说的O(1) 有个前提, 就是已经通过某种容器的存储方式进行初始化, 不然不可能在还未遍历数据的情况下就定位出最值. 问题1: 重新定义栈的数据结构,实现一个能够在O(1)时间复杂度内求出栈内最小元素的min函数. 思路: 需要一个变量minimum保存目前栈内所有值的最小值,因为最小值是随着出栈,入栈操作变化的,所以一个变量是不够的. 考虑引入辅助栈,辅助栈…
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; typedef long long ll; const int inf = 0x3fffff; int gra[200][200]; int vis[200]; int path[200]; int n,m,k,t;…
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线性表的顺序存储于链式存储(Swift面向对象版)>这篇博客的应用.本篇博客会分别给出队列的顺序和链式存储,以及栈的顺序和链式存储. 说到栈和队列这两种数据结构,理解起来应该不难.队列就是进行排队的数据结构,一个队列肯定是线性结构了,之所以称之为队列,是因为有着先入先出(FIFO ----first in…
前言 其实在学习数据结构之前,我也是从来都没了解过这门课,但是随着工作的慢慢深入,之前学习的东西实在是不够用,并且太皮毛了.太浅,只是懂得一些浅层的,我知道这个东西怎么用,但是要优化.或者是解析,就不知道该咋弄了.比如JAVA 最有名的几个容器: List Set MAP Queue 这些都是涉及到有关数据结构的,以及一些简单的算法.排序.冒泡排序.二分法这些,都要涉及到时间复杂度.以及数据结构的知识,这门课,还是很重要的. 为了啥 其实数据结构,结构这个词,就是将我们原本的一些数据,按照某种结…
栈和队列 ·栈和队列是两种常用的.重要的数据结构 ·栈和队列是限定插入和删除只能在表的“端点”进行的线性表 栈 只能在队尾插入,只能在队尾删除 -- 后进后出 表尾称为栈顶:表头称为栈底 插入元素到栈顶(即表尾)的操作,称为入栈 从栈顶删除最后一个元素的操作,称为出栈 注意:函数调用的流程就是入栈和出栈的实现,遵循后调用的先返回 队列 只能在队尾插入,只能在对队头删除 -- 先进先出 顺序栈的实现: #include <stdio.h> #include <stdlib.h> #d…
参考:python实现stack(栈)和队列(queue) - hjhmpl123的博客 - CSDN博客 参考:Python3 数据结构 | 菜鸟教程 栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出(迷宫所有路径) 栈示意图 queue:先进先出  队列示意图 注意,stack和queue是没有查询具体某一个位置的元素的操作的.但是他们的排列是按顺序的 对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除…
Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the ar…