使用C语言来解决循环队列问题的方法

2020-01-06 13:42:44王旭

易采站长站为您分析使用C语言来解决循环队列问题的方法,来自ACM的练习题实例,需要的朋友可以参考下

题目描述:

大家都知道数据结构里面有一个结构叫做循环队列。顾名思义,这是一个队列,并且是循环的。但是现在,淘气的囧哥给这个循环队列加上了一些规矩,其中有5条指令:

(1) Push K, 让元素K进队列。

(2) Pop,对头元素出队列。

(3) Query K,查找队列中第K个元素,注意K的合法性。

(4) Isempty,判断队列是否为空。

(5) Isfull,判断队列是否已满。

现在有N行指令,并且告诉你队列大小是M。

输入:

第一行包含两个整数N和M。1<=N,M<=100000。

接下来有N行,表示指令,指令格式见题目描述。

其中元素均在int范围。

输出:

对于指令(1),若队列已满,输出failed,否则不做输出。

对于指令(2),若队列已空,输出failed,否则不做输出。

对于指令(3),输出队列中第K个元素,若不存在,输出failed。

对于指令(4)和(5),则用yes或者no回答。

详情见样例。

样例输入:

12 2Push 1Push 2Push 3Query 2Query 3IsemptyIsfullPopPopPopIsemptyIsfull

样例输出:

failed2failednoyesfailedyesno

AC代码:

 

 
  1. #include <stdio.h>   #include <stdlib.h>  
  2. #include <string.h>    
  3. #define queuesize 100001 //最大队列长度    
  4. struct queue   {  
  5. int front;   int rear;  
  6. int data[queuesize];   int count; //记录队列中的元素  
  7. };    
  8. void InitQueue(struct queue *Q);   void EnQueue(struct queue *Q, int element, int m);  
  9. void Dequeue(struct queue *Q, int m);   void QueueSearch(struct queue *Q, int k, int m);  
  10.   int main()  
  11. {   int n, m, i, element, k, flag;  
  12. char command[10];    
  13. while(scanf("%d%d",&n, &m) != EOF)   {  
  14. if(n < 1 || m > 100000)   return 0;  
  15. struct queue *Q;   Q = malloc(sizeof(struct queue));