Responsive image

问题 A: 第1关:基于循环链表的队列的基本操作

问题 A: 第1关:基于循环链表的队列的基本操作

时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 122
[提交][状态][讨论版][命题人:]

题目描述

本关任务:用带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针)。实现该队列的入队出队以及判断队列是否为空操作。
#include<iostream>

using namespace std;
typedef struct QNode { //队列的链式存储结构
  int data;
  struct QNode * next;
}
QNode, * QueuePtr;
typedef struct {
  QueuePtr rear; //只设一个队尾指针
}
linkQueue;
int EmptyQueue(linkQueue Q) { //判断队列是否为空,空返回1,否则返回0
  //队列只有一个头结点,即当头结点的指针域指向自己时,队列为空
  /**************begin************/



  /**************end************/
}
void EnQueue(linkQueue & Q, int e) { //入队,插入元素e为Q的新的队尾元素
  /**************begin************/
  
  /**************end************/
}
void DeQueue(linkQueue & Q) { //出队,输出Q的队头元素值,后将其删除
  /**************begin************/
  


  /**************end************/
}
int main() {
  int n, m;
  while (cin >> n >> m) {
    if (n == 0 && m == 0) break;
    linkQueue Q; //初始化一个带头结点的循环链表
    Q.rear = new QNode;
    Q.rear -> next = Q.rear;
    while (n--) {
      int e;
      cin >> e;
      EnQueue(Q, e);
    }
    while (m--)
      DeQueue(Q);
    if (EmptyQueue(Q))
      cout << "0" << endl;
    else
      cout << "1" << endl;
  }
  return 0;
}



输入描述

多组数据,每组数据有两行。第一行为两个整数n和m,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),m表示出队序列B的元素数量(m个数依次连续出队,中间没有入队的情况)。第二行为序列A(空格分隔的n个整数)。当n和m都等于0时,输入结束。

输出描述

对应每组数据输出一行。每行包括m+1个整数,前m个数代表出队序列B的各个整数,最后一个整数表示队列是否为空,队列为空输出0,不为空输出1。整数之间用空格分隔。

样例输入

5 3
1 3 5 3 6
4 4
-1 2 3 4
0 0

样例输出

1 3 5 1
-1 2 3 4 0

提示


组合提交代码,你仅需要提交





int EmptyQueue(linkQueue Q) { //判断队列是否为空,空返回1,否则返回0


  //队列只有一个头结点,即当头结点的指针域指向自己时,队列为空


  /**************begin************/




 


  /**************end************/


}


void EnQueue(linkQueue & Q, int e) { //入队,插入元素e为Q的新的队尾元素


  /**************begin************/


 





  /**************end************/


}


void DeQueue(linkQueue & Q) { //出队,输出Q的队头元素值,后将其删除


  /**************begin************/


  








  /**************end************/


}




[提交][状态]
ACM算法攻关部