#数据结构#第三章:队列

判断题

1-1.所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。

F:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。因此,循环队列是一个抽象的数据结构,而单向循环链表或循环数组是具体的实现方式,不是数据结构本身。

1-2.在用数组表示的循环队列中,front值一定小于等于rear值。

F

1-3.不论是入队列操作还是入栈操作,在顺序存储结构上都需要考虑"溢出"情况。

T

选择题

2-1.为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是?

A.堆栈
B.队列
C.树
D.图

B

2-2.若已知一队列用单向链表表示,该单向链表的当前状态(含3个对象)是:1->2->3,其中x->y表示x的下一节点是y。此时,如果将对象4入队,然后队列头的对象出队,则单向链表的状态是:

A.1->2->3
B.2->3->4
C.4->1->2
D.答案不唯一

B

2-3.在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为( )。 (2分)

A.front=front->next
B.s->next=rear;rear=s
C.rear->next=s;rear=s;
D.s->next=front;front=s;

C

2-4.依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是( )。 (2分)

A.a
B.b
C.c
D.d

C

2-5.在一个不带头结点的非空链式队列中,假设f和r分别为队头和队尾指针,则插入s所指的结点运算是( )。 (2分)

A.f->next=s; f=s;
B.r->next=s; r=s;
C.s->next=s; r=s;
D.s->next=f; f=s;

B

2-6.若用大小为6的数组来实现循环队列,且当前front和rear的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,front和rear的值分别为多少? (2分)

A.2和0
B.2和2
C.2和4
D.2和6

A

2-7.如果循环队列用大小为m的数组表示,且用队头指针front和队列元素个数size代替一般循环队列中的front和rear指针来表示队列的范围,那么这样的循环队列可以容纳的元素个数最多为: (2分)

A.m
B.m - 1
C.m+1
D.不能确定

C

2-8.如果循环队列用大小为m的数组表示,队头位置为front、队列元素个数为size,那么队尾元素位置rear为: (2分)

A.front+size
B.front+size-1
C.(front+size - 1)%m
D.(front+size)%m

D

编程题

7-1 银行业务队列简单模拟

设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。

输入格式:

输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。

输出格式:

按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。

输入样例
8 2 1 3 9 4 11 13 15

输出样例
1 3 2 9 11 4 13 15

参考代码

#include<bits/stdc++.h>

using namespace std;


int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int n, num;
    int i, cnt = 1, flag = 1;
    queue<int>a;
    queue<int>b;
    cin>>n;
    for(i = 0; i < n; i++)
    {
        cin>>num;
        if(num % 2 == 1)
            a.push(num);
        else
            b.push(num);
    }
    while(!a.empty() || !b.empty())
    {
        while(!a.empty() && cnt <= 2)//a顾客优先输出,因为是速度是B的两倍,最多循环两次
        {
            if(flag == 1)
            {
                cout<<a.front();
                flag = 0;
            }
            else
            {
                cout<<" "<<a.front();
            }
            a.pop();
            cnt++;
        }
        cnt = 1;
        if(!b.empty())
        {
            if(flag == 1)
            {
                cout<<b.front();
                flag = 0;
            }
            else
            {
                cout<<" "<<b.front();
            }
            b.pop();
        }
    }
}

发布了145 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43476037/article/details/101218729
今日推荐