一、观看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】编程题:双人游戏