C++队列之动态分配数组

2024-05-09 18:32
文章标签 c++ 数组 队列 动态分配

本文主要是介绍C++队列之动态分配数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 、队列之定义

 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表

      

  (1)允许删除的一端称为队头(Front)。
  (2)允许插入的一端称为队尾(Rear)。
  (3)当队列中没有元素时称为空队列。
  (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。
     队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾(即不允许"加塞"),每次离开的成员总是队列头上的(不允许中途离队),即当前"最老的"成员离队。
 【例】在队列中依次加入元素a1,a2,…,an之后,a1是队头元素,an是队尾元素。退出队列的次序只能是a1,a2,…,an。

2、队列的基本逻辑运算
1)InitQueue(Q)
     置空队。构造一个空队列Q。

(2)QueueEmpty(Q)
     判队空。若队列Q为空,则返回真值,否则返回假值。

(3) QueueFull(Q)
     判队满。若队列Q为满,则返回真值,否则返回假值。
  注意:
     此操作只适用于队列的顺序存储结构。

(4) EnQueue(Q,x)
     若队列Q非满,则将元素x插入Q的队尾。此操作简称入队。

(5) DeQueue(Q)
     若队列Q非空,则删去Q的队头元素,并返回该元素。此操作简称出队。

(6) QueueFront(Q)
     若队列Q非空,则返回队头元素,但不改变队列Q的状态

那么下面来个示例来展现:

aqueue.h

#ifndef _AQUE_
#define _AQUE_#include <stdio.h>
#include <strings.h>
#include <stdlib.h>#define SIZE 10typedef int data_t;
typedef struct aqueue{data_t data[SIZE];int head;int tail;int num;
}AQUEUE;AQUEUE *creat_aqueue(void);
void init_aqueue(AQUEUE *Q);
int isfull_aqueue(AQUEUE *Q);
int isnull_aqueue(AQUEUE *Q);
void in_aqueue(AQUEUE *Q, data_t data);
data_t out_aqueue(AQUEUE *Q);#endif

aqueue.c

#include "aqueue.h"AQUEUE *creat_aqueue(void)
{AQUEUE *Q = (AQUEUE *)malloc(sizeof(AQUEUE));if(NULL == Q)exit(-1);bzero(Q, sizeof(AQUEUE));Q->head = 0;Q->tail = -1;Q->num = 0;return Q;
}void init_aqueue(AQUEUE *Q)
{bzero(Q, sizeof(AQUEUE));Q->head = 0;Q->tail = -1;Q->num = 0;
}int isfull_aqueue(AQUEUE *Q)
{return Q->num == SIZE?1:0;
}int isnull_aqueue(AQUEUE *Q)
{return Q->num == 0?1:0;
}void in_aqueue(AQUEUE *Q, data_t data)
{Q->tail = (Q->tail+1)%SIZE;Q->data[Q->tail] = data;Q->num++;
}data_t out_aqueue(AQUEUE *Q)
{data_t t = Q->data[Q->head];Q->head = (Q->head+1)%SIZE;Q->num--;return t;
}


main.c

#include "aqueue.h"int main()
{AQUEUE *Q = creat_aqueue();int i = 111;while(!isfull_aqueue(Q))in_aqueue(Q, i--);while(!isnull_aqueue(Q))printf("%d,", out_aqueue(Q));printf("\n");
}

 

缺点:从上面的代码中可以发现使用new 动态分配,对数组而言并不太合理,删除数组的一个元素,需要将余下的元素依次像前面移动,否则需要一些麻烦操作。

那么我们使用链表,是不是更加方便呢?

下一篇将使用C++的链表来解决这个问题!

 

期待将持续更新!

syw_selfimpr新浪微博地址: http://weibo.com/u/2945271402


注:以上代码在ubuntu下的gcc下编译正常运行!vs也可!

这篇关于C++队列之动态分配数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974165

相关文章

hdu1180(广搜+优先队列)

此题要求最少到达目标点T的最短时间,所以我选择了广度优先搜索,并且要用到优先队列。 另外此题注意点较多,比如说可以在某个点停留,我wa了好多两次,就是因为忽略了这一点,然后参考了大神的思想,然后经过反复修改才AC的 这是我的代码 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s