#include<stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define NUM 7
/* *队列是一个理论上的环形内存*实现队列初始化,入列,出列,遍历输出*队列是一个环形结构,front为队头标号,rear为队尾标号*front和rear不代表内存,只是作为读取内存的下标,这2个变量是为了存储下标的变量*******/
typedef struct Queue{int * pbase;int front;int rear;}queue,*pqueue;void init_queue(pqueue p_queue,int num);//初始
int is_full(pqueue p_queue, int num);
int is_empty(pqueue p_queue);
void en_queue(pqueue p_queue, int num ,int val);
void out_queue(pqueue p_queue, int num,int *pval);
void show_queue(pqueue p_queue, int num);int main(void){queue queue_r;pqueue p_queue = &queue_r;int val;init_queue(p_queue, NUM);//init queueshow_queue(p_queue,NUM);//try showing queue while it is emptyout_queue(p_queue, NUM, &val);//try outting queue while it is empty en_queue(p_queue,NUM,1);en_queue(p_queue,NUM,2);en_queue(p_queue,NUM,3);en_queue(p_queue,NUM,4);en_queue(p_queue,NUM,5);en_queue(p_queue,NUM,6);en_queue(p_queue,NUM,6); //try entering queue while it is fullshow_queue(p_queue,NUM);printf("show done\n");out_queue(p_queue,NUM,&val);//out queueshow_queue(p_queue,NUM);printf("out done\n");en_queue(p_queue,NUM,7);//enter queue while it has one slot availableshow_queue(p_queue,NUM);printf("enter done\n");}void init_queue(pqueue p_queue,int num){p_queue->pbase = (int*)malloc(sizeof(int)*num );//给队列分配定长的内存p_queue->front = 0;//使队列头标号为0p_queue->rear = 0;//使队列尾标号为0
}int is_full(pqueue p_queue, int num){if((p_queue->rear + 1)% num == p_queue->front){//如果队尾标号的下一个标号为队头说明满return 1;}else return 0;}int is_empty(pqueue p_queue){if(p_queue->front == p_queue->rear)//如果队尾与队头标号一样,说明空return 1;else return 0;}void en_queue(pqueue p_queue, int num ,int val){if(is_full(p_queue, num ) == 1)printf("queue full,can not enter\n");else{p_queue->pbase[p_queue->rear] = val;//以目前队尾标号作为下表,给队列内存赋值p_queue->rear = (p_queue->rear+1)%num;//队尾标号加一}
}void out_queue(pqueue p_queue, int num,int *pval){if(is_empty(p_queue) == 1)printf("queue is empty, can not out\n");else{*pval = p_queue->pbase[p_queue->front];//以目前队头标号为下表,输出内存中值p_queue->front =(p_queue->front +1)%num;//使队头标号加1}
}void show_queue(pqueue p_queue, int num){int i = p_queue->front;//把队头标号复制出来,因为输出时不能破坏原队列标号if(is_empty);while(i != p_queue->rear){//如果队头标号不等于队尾标号,就输出以队头标号为下标的内存中的值,因为当队头标号等于队尾标号,说明已经读到尾部了printf("%d\n", p_queue->pbase[i]);i = (i+1)%num;//下标加1,方便循环读数}}

数组队列存储结构的简单实现例子相关推荐

  1. 数据链式存储结构的简单应用 例子

    数据结构中链式栈的简单应用例子: (亲供参考) #include<iostream> #include<math.h> #include<stdio.h> usin ...

  2. 图的数组(邻接矩阵)存储结构

    图是比较复杂的数据结构,它由顶点和顶点之间的弧或边组成.任何两个顶点之间都 可能存在弧或边.在计算机存储图时,只要能表示出顶点的个数及每个顶点的特征.每对 顶点之间是否存在弧(边)及弧(边)的特征,就 ...

  3. 栈和队列存储结构总结

    认识: 栈和队列是线性表的子集 (是插入和删除位置受限的线性表) 一.栈: 1.什么是栈? 栈是一种只能在一端插入或删除操作的线性表 2.栈的特点? 后进先出 3.栈的存储结构 3.1顺序栈 假设栈的 ...

  4. C++与MATLAB数组的存储结构

    数组都是以一维数组的形式分配在数据空间的: 1.一维数组X[M]的情况下 index_C=i; index_matalb=i; 2.二维数组A[M][N]的情况下 index_C=i*N+j inde ...

  5. 队列定义、队列的存储结构

    队列定义 队列(queue )简称队,它同堆栈一样,也是一种运算受限的线性表, 其限制是仅允许在表的一端进行插入,而在表的另一端进行删除. 在队列中把插入数据元素的一端称为 队尾(rear) ),删除 ...

  6. 数据结构概述(逻辑结构与存储结构概念详解)

    目录 一.一些基本概念 二.逻辑结构 1.集合结构: 2.线性结构: 1)线性表: 2)栈 3)队列 4)串 3.非线性结构: 1)数组 2)广义表 3)树 4)堆 5)图 三.物理结构/存储结构 1 ...

  7. .shp文件的存储结构是怎样的?底层读取shapefile文件

    .shp文件的存储结构是怎样的?底层读取shapefile文件 基础知识 shp的存储结构 python 字节流读取Shp文件 基础知识 大家都比较熟悉shp文件,它是GIS软件可以读取的矢量文件.但 ...

  8. 队列的定义、循环队列的顺序存储结构及链式存储结构

    文章目录 1 队列的定义 1.1 文字定义 1.2 代码定义 2 循环队列 2.1 循环队列的定义 2.2 循环队列的顺序存储结构 3 队列的链式存储结构 3.1 链队列的入队操作 3.2 链队列的出 ...

  9. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

最新文章

  1. 夏天雷雨天机房断电了,该怎么办?,叫你几招紧急应对方法
  2. Condition_number
  3. vue-cli创建新项目
  4. Synchronized结合Java Object对象中的 wait,notify,notifyAll
  5. python去停用词用nltk_使用nltk删除英文停用词
  6. 【今日CV 计算机视觉论文速览 第110期】Thu, 2 May 2019
  7. eclipse中选中字段,其他相同字段被覆盖的颜色修改
  8. 用户体验是非常难琢磨的东西
  9. keil p0 0c语言不了,Keil C51对C语言的关键词扩展之十三: sfr
  10. iOS开发--开发者帐号
  11. Python数据处理之导入导出excel数据
  12. isupper()函数
  13. python的索引与切片
  14. 十道解分式方程及答案_100道八年级解分式方程练习题(带答案)
  15. argument 1 must be str, not PosixPath
  16. 招商银行笔试题之员工考勤记录
  17. 覆盖和覆盖D2D通信网络的传输容量分析(Matlab代码实现)
  18. JavaScript动态操作网页思维导图
  19. 新浪开发平台实现分享
  20. With...As 用法--公用表达式

热门文章

  1. 多态的含义、多态的作用及多态的详细代码实现
  2. 实现Johnson-Trotter算法
  3. 【面试/笔试】—— 数学
  4. Linux_查看内存使用情况
  5. 卷积神经网络CNNs详解参考----MNIST
  6. word中目录出现省略号疏密不一致
  7. MATLAB基础应用精讲-【基础知识篇】MATLAB中的标点符号
  8. 使用U盘启动安装U盘内linux6.1
  9. 对等网络(P2P)--网络大典
  10. python 答题卡识别_opencv+python机读卡识别(最终版)