例3.1 猜猜数据结构 UVa11995

1.标题叙述性说明:点击打开链接

2.解题思路:据来推測一种可能的数据结构,备选答案有“栈,队列。优先队列”。结果也可能都不是或者不确定。

STL中已经有这三种数据结构了,因此直接模拟题意,输出时推断是否相应就可以。注意:弹出时要推断一下是否已经为空。

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std;

stack<int>s;
queue<int>q;
priority_queue<int>p;
char st[][20] = { "impossible", "priority queue", "queue","not sure" , "stack", "not sure","not sure" ,"not sure"  };
void clear()
{
	while (!s.empty())s.pop();
	while (!q.empty())q.pop();
	while (!p.empty())p.pop();
}
void add(int x)
{
	s.push(x);
	q.push(x);
	p.push(x);
}
void pop()
{
	if (!s.empty())s.pop();
	if (!q.empty())q.pop();
	if (!p.empty())p.pop();
}
int main()
{
	//freopen("t.txt", "r", stdin);
	int n;
	while (~scanf("%d", &n))
	{
		clear();
		int ok1, ok2, ok3;
		ok1 = ok2 = ok3 = 1;
		for (int i = 0; i < n; i++)
		{
			int a, b;
			cin >> a >> b;
			if (a == 1)add(b);//统一加入
			else
			{
				if (s.empty() || s.top() != b)
					ok1 = 0;
				if (q.empty() || q.front() != b)
					ok2 = 0;
				if (p.empty() || p.top() != b)
					ok3 = 0;
				pop();//统一弹出
			}
		}
		int x = (ok1 << 2) | (ok2 << 1) | ok3;//编码,方便输出结果
		printf("%s\n", st[x]);
	}
	return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-10-15 03:18:37

例3.1 猜猜数据结构 UVa11995的相关文章

例题3.1 猜猜数据结构 UVa11995

1.题目描述:点击打开链接 2.解题思路:本题要求根据输入的数据和输出的数据来猜测一种可能的数据结构,备选答案有"栈,队列,优先队列",结果也可能都不是或者不确定.STL中已经有这三种数据结构了,因此直接模拟题意,输出时判断是否对应即可.注意:弹出时要判断一下是否已经为空. 3.代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string

【暑假】[实用数据结构]UVa11995 I Can Guess the Data Structure!

UVa11995  I Can Guess the Data Structure! 思路:边读边模拟,注意empty的判断! 代码如下: #include<iostream> #include<queue> #include<stack> using namespace std; int main(){ queue<int> q; priority_queue<int> pri_q; stack<int> sta; int n; wh

UVa 11995 猜猜数据结构

代码来自蓝书第三章第一题,思路很清晰.主要实现过程中需要区分以下数据结构: stack queue priority_queue #include<cstdio> #include<queue> #include<stack> #include<cstdlib> using namespace std; const int maxn = 1000 + 10; int n, t[maxn], v[maxn]; int check_stack() { stack

南阳OJ-63 小猴子下落(数据结构-二叉树)

题目63小猴子下落时间限制:3000 ms | 内存限制:65535 KB难度:3描述有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1.在结点1处放一个小猴子,它会往下跑.每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴子往左走,否则往右走,直到走到叶子结点. 一些小猴子从结点1处开始往下跑,最后一个小猴儿会跑到哪里呢? 输入输入二叉树叶子的深

小猪的数据结构辅助教程——1.数据结构与算法绪论

小猪的数据结构辅助教程--1.数据结构与算法绪论 标签(空格分隔): 数据结构 本节学习路线图与学习要点 学习要点: 1.了解数据结构的相关概念 2.了解算法的相关概念 3.熟悉时间复杂度的计算 4.了解空间复杂度的概念,闰年表空间换时间的样例~ 1.什么是数据结构? 2.算法的叙述 3.时间复杂度计算的简单演示样例 数据结构预算法--时间复杂度分析实例

数据结构—队列

数据结构-队列 1.队列的定义 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许插入的一端称为队尾(rear),允许删除的一端称为队头 (Front) 队列模型 2.队列的操作 队列的操作原则是先进先出的,所以队列又称作FIFO表(First in First out) 置空队:InitQueue(Q) 判队空:QueueEmpty(Q) 判队满:QueueFull(Q) 入队:En

【数据结构】堆

堆 这种数据结构.一般堆用来实现优先级队列.优先级队列:和通常的栈和队列一样,只不过里面的每个元素都有一个"优先级",在处理的时候,首先处理优先级最高的.通常包含三个操作getMax/delMax/insert 栈和队列算是优先级队列的特例. 使用其他数据结构均不能同时在O(lgn)的复杂度下完成.至少有一种操作要耗时O(nlgn).比如链表的插入操作O(1),但是获取最大值必须遍历链表. 可以使用BBST以上三个操作达到最好的时间复杂度O(lgn).事实上没必要用那么高端的数据结构来

数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)

代码注释比较详细: #include <iostream> #include <cstdlib> using namespace std; struct Node{ int data; Node* next; }; Node* head = NULL; bool create() { head = (Node*)malloc(sizeof(Node)); if(NULL == head) return false; head->data = 0; head->next

附录一 再论指针和数组

附录一 附录一 再论指针和数组 再论指针和数组 [email protected]:Kevin-Dfg/[email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 预习检查 链表单元有哪几个部分组成 如何申请链表单元,及释放链表单元 实现单链表插入的基本语法 简述一下快速排序基本理论要点 [email protected]:Kevin-Dfg/[email protected]:Kevin-Dfg/Dat