模拟队列 数据结构 SzNOI c004

昨天苏州oj爆掉了,就没发,今天补上,利用的是循环队列来做的

内容:

【问题描述】

请设计一个程序模拟队列,具备初始队列、入队、出队、输出队列数据的功能。

【输入】

输入由若干行组成,每行表示一种操作。每行由一个或两个整数组成,其中第一个整数代表操作的类型:1表示初始队列操作,2表示入队操作,3表示出队操作、4表示输出队列信息,第二个整数表示操作所涉及的数据。

初始队列操作:将队列置为空并重新设置队列容量。该行第二个整数设为队列的容量。

入队操作:将该行第二个整数入队,如队列中元素个数超过队列容量则输出“Full OV”。

出队操作:正常删除队首元素,如果队列中已无任何元素,则输出“Empty OV”。

输出操作:按从队首到队尾的顺序输出队内所有元素,空队列输出“Empty”。

【输出】

根据不同的操作,输出不同的操作信息。

初始队列操作无输出信息。入队、出队如有错则输出出错信息,否则无输出信息。输出操作按从队首到队尾的顺序输出队内所有元素(元素之间用一个空格隔开)。

【样例】

输入

1 2

3

2 78

2 88

2 99

3

4

3

4

2 99

4

输出

Empty OV

Full OV

88

Empty

99

以下是代码

#include<iostream>
using namespace std ;
class Queue{
	protected:
		int rear ,front ;
		int maxSize ;
		int *elements ;
	public:
		Queue() {
		}
		void begin(int sz){
			front = 0 ;
			rear = 0 ;
			maxSize = sz+1 ;
			elements = new int [maxSize];
 		}
		bool IsEmpty () {
			return (front == rear ) ? true : false ;
		}
		bool IsFull () {
			return((rear+1 ) %maxSize == front )? true :false ;
		}
		bool EnQueue (const int & x) {
			if(IsFull() == true ) {
				cout << endl;
				cout <<"Full OV";
				cout <<endl;
				return false ;}
			elements[rear] = x ;
			rear = (rear+1)%maxSize ;
			return true ;
		}
		bool DeQueue(  ) {
			if(IsEmpty() == true ) {
				cout <<endl;
				cout<<"Empty OV";
				cout << endl;
				return false ;
			}
			front = (front +1)%maxSize ;
			return true ;
		}
		void  print() {
			if(IsEmpty () == true ) {
				cout <<endl;
				cout << "Empty" ;
			}
			else{
				for(int i =front ; i!= rear ; i=(i+1)%maxSize ) {
					cout << elements [i]<<" ";
				}
			}

		}
};

void test(Queue& a , int choice) {
	switch (choice) {
		case 1: {
				int size ;
				cin >>size ;
				a.begin(size) ;
			}
			break ;
		case 2:{
				int number ;
				cin >> number ;
				a.EnQueue(number) ;
			}
			break ;
		case 3: {
				a.DeQueue( ) ;
				}
			break ;
		case 4:{
				a.print() ;
			   }
			break ;
		default:
			cout <<"wrong"<< endl;
			break ;
		}
	}
int main () {
	Queue a ;
	int choice ;
	while (cin >>choice) {
		test(a,choice) ;
	}

	return 0 ;

}
时间: 2024-11-01 11:43:43

模拟队列 数据结构 SzNOI c004的相关文章

用LinkedList模拟一个堆栈或者队列数据结构 总结: LinkedList知识点

/** 用LinkedList模拟一个堆栈或者队列数据结构. 创建一个堆栈和队列数据结构对象,该对象中使用LinkedList来完成的. 知识点总结: 1.LinkedList特点:链表式数据结构. 重复有序,查询速度慢,增删速度快.不同步的. 2.LinkedList除了实现List接口增删改查的功能外,有一些特有的方法,能够实现在List(列表)的开头和结尾 插入,删除,获取等特有功能.这就是为什么LinkedList能够模拟一个堆栈,或者队列,双端队列的数据结构了. 涉及知识点: 1.什么

使用LinkedList模拟一个堆栈或者队列数据结构

使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出  如同一个杯子. 队列:先进先出  如同一个水管. import java.util.LinkedList; public class DuiLie { private LinkedList link; public DuiLie() { link = new LinkedList(); } public void myAdd(Object obj) { link.addFirst(obj); } public Object

java集合 collection-list-LinkedList 模拟一个堆栈或者队列数据结构。

/* 使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出 如同一个杯子. 队列:先进先出 First in First out FIFO 如同一个水管. */ import java.util.*; class DuiLie { private LinkedList link; DuiLie() { link = new LinkedList(); } public void myAdd(Object obj) { link.addFirst(obj); } public O

Java LinkedList特有方法程序小解 &amp;&amp; 使用LinkedList 模拟一个堆栈或者队列数据结构。

package Collection; import java.util.LinkedList; /* LinkedList:特有的方法 addFirst()/addLast(); getFirst()/getLast(); removeFirst()/removeLast(); 若链表为空,抛出 没有这个元素异常/NoSuchElementException 但是 JDK1.6 版本以后出现了替代方法: offerFirst()/offerLast(); peekFirst()/peekLas

Java使用LinkedList模拟一个堆栈或者队列数据结构

用Java模拟一个堆栈或者队列数据结构. 首先得明白堆栈和队列的数据结构: 堆栈:先进后出 队列:先进先出 LinkedList中刚好有addFirst()和addLast()方法. [java] view plaincopyprint? public class Stack { public static void main(String[] args) { StackTools tools = new StackTools(); tools.add("a"); tools.add(

自定义栈的实现及使用两个栈模拟队列

一,使用单链表实现栈 ①栈需要一个栈顶指针 ②栈的基本操作有出栈和入栈,以及判断栈是否为空 ③单链表中每个结点表示一个栈元素,每个结点有指向下一个结点的指针.因此,在栈内部需要实现一个单链表.代码如下: public class Stack<T extends Comparable<? super T>>{ private class Node{ T ele; Node next; public Node(T ele) { this.ele = ele; } } Node top;

【干货】容器适配器实现两个栈模拟队列

用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream> #include<string> #include<cassert> struct __TrueType//类型萃取 { bool Get() { return true; } }; struct __FalseType { bool Get() { return false

《模拟队列或堆栈》

1 package cn.itcast.api.b.list.subclass; 2 3 import java.util.LinkedList; 4 5 public class LinkedListTest { 6 7 public static void main(String[] args) { 8 /* 9 * 面试题:用LinkedList模拟一个堆栈或者队列数据结构. 10 * 创建一个堆栈或者队列数据结构对象.该对象中是使用LinkedList来完成的. 11 * 12 */ 1

Java集合框架之LinkedList-----用LinkedList模拟队列和堆栈

LinkedList的特有方法: (一)添加方法 addFisrt(E e):将指定元素插入此列表的开头.//参数e可以理解成Object对象,因为列表可以接收任何类型的对象,所以e就是Object对象(传递过程即向上转型). addLast(E e):将指定元素插入此列表的结尾. JDK1.6之后: offerFirst(); offerLast();//其实前后的用法相同,换了一个名字而已. (二):获取元素方法(获取过程不删除链表元素): getFirst();返回此列表的第一个元素.如果