博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之队列
阅读量:5342 次
发布时间:2019-06-15

本文共 1586 字,大约阅读时间需要 5 分钟。

队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。

队列有下面几个操作:

  • InitQueue()   ——初始化队列
  • EnQueue()        ——进队列
  • DeQueue()        ——出队列
  • IsQueueEmpty()——判断队列是否为空
  • IsQueueFull()    ——判断队列是否已满

队列可以由数组和链表两种形式实现队列操作(c语言),下面仅以数组为例:

数组实现:

队列数据结构

typedef struct queue{        int queuesize;   //数组的大小        int head, tail;  //队列的头和尾下标        int *q;          //数组头指针}Queue;

InitQueue()   ——初始化队列

void InitQueue(Queue *Q){        Q->queuesize = 8;        Q->q = (int *)malloc(sizeof(int) * Q->queuesize); //分配内存        Q->tail = 0;        Q->head = 0;}

这样有个缺陷,空间利用率不高。采用循环队列:

 

EnQueue()        ——进队列

void EnQueue(Queue *Q, int key){        int tail = (Q->tail+1) % Q->queuesize; //取余保证,当quil=queuesize-1时,再转回0        if (tail == Q->head)                   //此时队列没有空间        {            printf("the queue has been filled full!");        }        else        {            Q->q[Q->tail] = key;            Q->tail = tail;        }}

DeQueue()        ——出队列

int DeQueue(Queue *Q){        int tmp;        if(Q->tail == Q->head)     //判断队列不为空        {            printf("the queue is NULL\n");        }        else        {            tmp = Q->q[q->head];            Q->head = (Q->head+1) % Q->queuesize;        }        return tmp;}

IsQueueEmpty()——判断队列是否为空

int IsQueueEmpty(Queue *Q){        if(Q->head == Q->tail)        {            return 1;        }        else        {            return 0;        }}

IsQueueFull()——判断队列是否已满

int IsQueueFull(Queue *Q){    if((Q->tail+1)% Q->queuesize == Q->head)    {        return 1;    }    else    {        return 0;    }}

 

 

转载于:https://www.cnblogs.com/kaituorensheng/archive/2013/02/28/2937865.html

你可能感兴趣的文章
第二章作业心得
查看>>
CMD批处理延时启动的几个方法
查看>>
转:LoadRunner中web_custom_request 和 web_submit_data的差别
查看>>
HTC G7直刷MIUI开启A2SD+亲测教程
查看>>
shiro的rememberMe不生效
查看>>
const 不兼容的类型限定符问题
查看>>
OpenCV的配置
查看>>
spring Cache + Redis 开发数据字典以及自定义标签
查看>>
成功连上数据库顿感世界美好许多
查看>>
编程注意2
查看>>
《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
查看>>
kosaraju求强连通分量
查看>>
Block作为返回值时的使用
查看>>
文件管理之文件后缀名识别
查看>>
android 表情,软键盘冲突解决方案(仿微博等SNS应用)
查看>>
ASP.NET MVC随想录——锋利的KATANA
查看>>
20155303 2016-2017-2 《Java程序设计》第五周学习总结
查看>>
selenium爬取网易云
查看>>
常用配置文件
查看>>
Python全栈之路系列之流程控制
查看>>