数据结构算法每日一练(八)数组循环队列

数据结构算法每日一练(八)数组循环队列

难度: ⭐⭐

题目: 下面是给定容量为MAX的使用循环数组实现队列的代码片段,其中T是队列中元素类型。

static int const MAX = 256; //队列的最大容量

static T* data; //循环数组,队列元素存储在此

static 其他必要数据;

(1)请给出循环数组实现队列所需的其他必要数据的定义;

(2)请使用循环数组实现队列的下述六个功能函数,请首先用语言描述实现的方法,再给出C/C++语言的具体实现。

​ void ini(); //初始化函数

​ int size(); //返回队列中元素个数

​ bool full(); //判满函数

​ bool empty(); //判空函数

​ T front(); //返回队头元素; T是元素类型

​ void push(T v); //入队

​ void pop(); //出队

(1)
定义队头指针和队尾指针

static typedef struct {
    T* data; //存放队列元素
    int front, rear; //队头指针和队尾指针
} SqQueue;

(2)

1. void ini(); //初始化函数

首先将数组初始化,将队头指针和队尾指针设置初始值为0

void ini(SqQueue &Q) {
    Q.data = new T[MAX]; //数组初始化 
	Q.front = Q.rear = 0;
}

2. int size(); //返回队列中元素个数

队尾指针减去队头指针,然后加上MAX,然后取模MAX。

init size(SqQueue Q) {
    return (Q.rear - Q.front + MAX) % MAX;
}

3. bool full(); //判满函数

当队尾指针加1取模等于队头指针时,判满。

bool full(SqQueue Q) {
    return (Q.rear + 1) % MAX == Q.front;
}

4. bool empty(); //判空函数

当队头指针等于队尾指针时,队列为空。

bool empty(SqQueue Q) {
    return Q.front == Q.rear;
}

5. T front(); //返回队头元素; T是元素类型

先判断队列是否为空,若为空则返回-1,否则返回队头指针。

T front(SqQueue Q) {
    if(empty(Q))
        return -1;
	return Q.data[Q.front]; //返回
}

6. void push(T v); //入队

当入队时,先判断队列是否满,不满,则将数据加入队尾指针,然后队尾指针加1取模。

void push(SqQueue &Q, T v) {
    if(full(Q))
        return;
    Q.data[Q.rear] = v;
    Q.rear = (Q.rear + 1) % MAX;
}

7. void pop(); //出队

判断队列是否为空,若不为空,则先取出队头指针的数据,然后队头指针加1取模。

void pop(SqQueue &Q, T &x) {
    if(empty(Q))
        return;
    x = Q.data[Q.front];
    Q.front = (Q.front + 1) % MAX; //队头指针加1取模
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值