sicily数据结构

由于半个学期的数据结构都没学,期末开始慌张,开始敲其他班数据结构的题,发现连打个队列都成问题了,原题如下; 请完成以下队列类的实现:(请注意数组实现应该为循环数组)
打吧。
一开始的想法是将rear 和front无限延伸,然后在具体取数组的数值时进行取模处理,从而达到逻辑上循环数组的效果,但后来发现同学的代码不是这样过了,觉得我自己的有很大的问题,int类型本身就是有限的,不可能无限延伸,这样循环数组即使有限我的代码也会因为溢出出现问题,第二点,我将队列空的情况想成rear-front==-1,这样在我一开始的想法下是没错的,但用同学的想法(每一次对队列进行增减操作都将rear和front设到正确的位置)就有很大问题,比如在中间rear-front==-1就不知道是满了还是0,所以我变成了rear-front==0为空的判别条件
最终代码如下:
#include
using namespace std;
enum ErrorCode {
success,
underflow,
overflow
};
const int maxQueue = 100;
template
class MyQueue {
public:
MyQueue() : front(0), rear(0) {}
// 判断队列是否为空
bool empty() const {return rear == front;}
// 入队操作
ErrorCode append(const QueueEntry &item) {
if ((rear + 1) % maxQueue == front) return overflow;
else {
entry[rear] = item;
rear = (rear + 1) % maxQueue;
return success;
}
}
// 出队操作
ErrorCode serve() {
if (rear == front) return underflow;
else {
front = (front + 1) % maxQueue;
return success;
}
}
// 获取队头元素
ErrorCode retrieve(QueueEntry &item) const {
if (rear == front) return underflow;
else {
item = entry[front];
return success;
}
}
// 判断队列是否已满
bool full() const {
return (rear + 1) % maxQueue == front;
}
// 获取队列已有元素个数
int size() const {
return (rear - front + maxQueue) % maxQueue;
}
// 清除队列所有元素
void clear() {
while (rear != front) {
serve();
}
}
// 获取队头元素并出队
ErrorCode retrieve_and_serve(QueueEntry &item) {
if (rear == front) return underflow;
else {
item = entry[front];
front = (front + 1) % maxQueue;
return success;
}
}
void print() {
for (int i = front; i < rear; i++) {
cout << entry[i] << ‘ ‘;
}
cout << endl;
cout << ‘size‘ << size() << endl;
cout << ‘fulll?‘ << full() << endl;
cout << ‘empty?‘ << empty() << endl;
}
private:
int front; // 队头下标
int rear; // 队尾下标
QueueEntry entry[100]; // 队列容器
};
第二题是根据队列进行一个游戏,题如下

X

本来用队列逻辑很清晰的做出来,按找游戏次序出列,入列,然后每个节点增加一个位置属性,输出就可以。懒癌复发,还是自己想其他方法作罢:
#include
using namespace std;
struct node {
int select;
int content;
};
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
node num[27];
int s = 0;
for (int i = 0; i < 27; i++) {
num[i].select = 0;
num[i].content = 0;
}//初始化
int j = 0;
for (int i = 0; i < n; i++) {
while(num[j].select != 0) j++;//每一次将j调到正确的位置,即上一次j之后的第一个未被选中的位置
int step = i;
while (step--) {
if (num[(j + 1) % n].select == 0) {}
else step++;
j = (j + 1) % n;
}//走未被选中的位置走step步
num[j].content = i + 1;
num[j].select = 1;
}
for (int i = 0; i < n; i++) {
cout << num[i].content << ‘ ‘;
}
cout << endl;
}
return 0;
}

时间: 2024-10-18 06:52:16

sicily数据结构的相关文章

(转)sicily题目分类

Sicily题目分类 ·         [数据结构/图论] 1310 Right-Heavy Tree   笛卡尔树相关,复杂度O(N)或O(NlogN). ·1426 Phone List         电话号码前缀检索,trie树相关. ·1443 Printer Queue      基本队列操作. ·1149 等价表达式         判断表达式是否等价(递归求解) ·1136 山海经             n长序列里求m次区间询问的最大连续子区间和.线段树/RMQ ·1252

你真的懂了redis的数据结构吗?redis内部数据结构和外部数据结构揭秘

Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 很多人面试时都遇到过这种场景吧? 其实除了上面的几种常见数据结构,还需要加上数据结构HyperLogLog.Geo. 可是很多人不知道redis 不仅有上面的几种数据结构,还内藏了内部的数据结构.即redis可以分为外部数据结构和内部数据结构. 1. 如何查看redis的数据结构? ####1.1 如何查看redis的外部数据结构?可以使用type命令,返回key的类型,如str

【数据结构】之散列链表(Java语言描述)

散列链表,在JDK中的API实现是 HashMap 类. 为什么HashMap被称为"散列链表"?这与HashMap的内部存储结构有关.下面将根据源码进行分析. 首先要说的是,HashMap中维护着的是一个数组: transient Node<K,V>[] table; ,数组中的每个元素都是一个 Node 对象.这里的Node是HashMap的一个内部类,代码如下: static class Node<K,V> implements Map.Entry<

旧题新做:从idy的视角看数据结构

“今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 second 给你一个长度为N 的整数序列,支持两种操作: • modity l r val 将区间[l,r] 中的所有数修改为val • query l r 询问区间[l,r] 所有数的和 分析:最简单的线段树,区间更改区间求和.但注意是更改,不是添改,sum与flag需同时覆盖. Problem 2.

数据结构Set和Map

一.数据结构 Set 集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中.  特点:key 和 value 相同,没有重复的 value.ES6 提供了数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. 1. 如何创建一个 Set const s = new Set([1, 2, 3]); 2.属性 console.log(s.size); // 3 3.Set 类的方法 --set.add(v

数据结构基本概念

什么是数据结构 "数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系.这些联系可以通过定义相关的函数来给出"--Sartaj Sahni,<数据结构.算法与应用> "数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现."--Clifford A.Shaffer,<数据结构与算法分析> "数据结构(data structture)是计算机中存储.组织数据的方式.通常情况下,经i想你

分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令

Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sorted Set. Redis数据类型内存结构分析 Redis内部使用一个redisObject对象来表示所有的key和value.redisObject主要的信息包括数据类型(type).编码方式(encoding).数据指针(ptr).虚拟内存(vm)等.type代表一个value对象具体是何种数

【Python&amp;数据结构】 抽象数据类型 Python类机制和异常

这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Python编程,借着本次机会仔细学习一下. 抽象数据类型 最开始的计算机语言,关注的都是如何更加有效率地计算,可以说其目的是计算层面的抽象.然而随着这个行业的不断发展,计算机不仅仅用于计算,开发也不仅只关注计算过程了,数据层面的抽象也变得同样重要.虽然计算机语言一开始就有对数据的抽象,但是那些都只是对一些最基本的

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常