对接CSP-J/S认证C++算法蓝桥等考导学/四级:线性数据结构/之五:(18)队列之队列

一、观看PPT教程 

01】队列

二、练习题(不清楚回头查看有关PPT)

01】下面是队列的定义的描述,如果有错误,请改正:队列:只允许在一端进行插入数据操作,在另一端进行删除或访问操作的线性数据结构;队列具有先进先出的特点(Fist In First Out)。约定只能从数据的一端进行入队操作,即添加数据,这一端称作队;对应另一端进行出队、访问操作,这一端称作队。【02】下面用静态数组模拟队列,补全缺失的注释:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>using namespace std;const int max_size = 1001;int queue[max_size];  //int head = 0;  //int tail = -1; ////bool empty(){  //  return tail + 1 == head;}//void push(int x){  if(tail == max_size -1)  //      cout << "队列已满" << endl;  else //      queue[++tail] = x;}//void pop(){  if(empty())  //      cout << "队列为空" << endl;  else      head++;  // }//void print_queue(){  if(empty())  //      cout << "队列为空" << endl;  else{  //    while(!empty())  //        cout << queue[head++] << "  ";    cout << endl;  }  }
int main(){    int data[] = {3,3,2,6,8,4,9};    for(int i=0;i<7;i++)push(data[i]);    empty();    pop();    print_queue();   return 0;}

03】队列的优化与循环队列的描述,如果有错误请改正:

使用数组模拟队列会导致一个问题:随着整个队列向数组的尾部移动,一旦到达数组的最末端,即使数组的前端还有空闲位置,再进行入队操作也会导致溢出(这种数组里实际有空闲位置而发生了上溢的现象被称为假溢出)。前面的程序中加入了队列已满的判断,并不能避免这种空闲位置被浪费的情况。解决假溢出的办法是通过取余、利用循环的方式来存放队列元素(数组下标为x的元素,它移动的下一个位置为(x+1)%max_size)。这样就形成了循环队列。04】下面用静态数组模拟循环队列,补全缺失的代码:

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

#include<iostream>using namespace std;const int max_size = 5;int queue[max_size];  //定义静态数组表示队列 int head = 1;  //队首 int tail = 0; //队尾 //判空 bool empty(){  //1表示队列为空,0表示队列不为空   ;}//判满bool full(){  //1表示队列满,0表示队列未满  ; }//入队 void push(int x){  if(full())  //队列满时进行提示       cout << "队列已满" << endl;  else{ //否则,tail移动下一个位置,元素入队       ;      queue[tail] = x;    }}//出队 void pop(){  if(empty())  //队空时进行提示       cout << "队列为空" << endl;  else  //否则,head移向下一个位置,表示元素出队       ;}//遍历 void print_queue(){  if(empty())  //队空时进行提示       cout << "队列为空" << endl;  else{  //否则,打印head指向的每一个元素     while(!empty()){  //head移动,直至队列为空         cout << queue[head] << "  ";        ;       }    cout << endl;  }  }
int main(){    int data[] = {3,3,2,6,8,4,9};    for(int i=0;i<7;i++)push(data[i]);    empty();    pop();    print_queue();   return 0;}

05】编程题:双人游戏