王道考研数据结构队列——综合习题题解

Q1:使用tag标签判断队满队空。写出出入队的操作。

Ans:我直接给出抽象数据类型吧。

#include
#define Maxsize 50
using namespace std;
class CycleQueue{
	private:
		int data[Maxsize];
		int front,rear;
		int tag;
	public:
		CycleQueue();
		int EnQueue(int value);
		int	DeQueue(); 
		void Display();
};
CycleQueue::CycleQueue(){ 
	front = rear;
	tag = 0;
}

CycleQueue::EnQueue(int value){
	if(rear == front && tag == 1){
		printf("QueueOverstack!\n");
		return 0;
	}
	data[rear] = value;
	//printf("%d ",data[rear]);
	rear = (rear+1)%Maxsize;
	tag = 1;
	return 1;
}

CycleQueue::DeQueue(){
	if(rear == front && tag == 0){
		printf("Queue Empty!\n");
		return -1;
	}
	int value = data[front];
	front = (front+1)%Maxsize;
	tag = 0;
	return value;
} 
void CycleQueue::Display(){
	printf("Display\n%d ",data[front]);
	for(int i = 1 ; i < Maxsize ; i ++){
		if((front+ i)%Maxsize == rear ){
			break;
		}
		printf("%d ",data[front+i]);
	}
	printf("\n");
	return ;
}
int main(){
	CycleQueue *c = new CycleQueue();
	for(int i = 0 ; i < 62 ; i ++){
		c[0].EnQueue(i);
	}
	c[0].Display();
}

Q2:使用栈将队列逆转。

Ans:栈是先进后出,队列是先进先出的数据结构,将队列逆转只要将队列的元素出队后直接入栈,然后出栈入队就可以。


Q3:用两个栈模仿队列。

Ans:队列先进先出,栈先进后出,所以从队列里出来后顺序入栈1,然后从栈1弹出入栈2,就是顺序输出。

你可能感兴趣的:(C++数据结构)