欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

(5)队列

发布时间:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 (5)队列 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

队列知识点:

循环队列:

队列的操作:

创建队列:

判断队列是否已满:

入队:

遍历队列:

判断队列是否为空:

出队:



这篇笔记是根据郝斌老师的上课讲义整理而得:

队列知识点:

定义:一种可以实现先进先出的存储结构,分为链式队列(链表实现)和静态队列(数组实现)。

循环队列:


            1. 静态队列为什么必须是循环队列
                    front指向队列第一个元素
                    rear指向队列最后一个元素的下一个元素
            2. 循环队列需要几个参数确定
                    两个参数;不同场合有不同的含义    
            3. 循环队列各个参数的含义
                    1) 队列初始化
                            front 和rear 值为零
                    2) 队列非空
                            front代表的是队列的第一个元素
                            rear代表队列最后一个有效元素的下一个元素
                    3) 队列空
                            front = rear 但不一定为零
                            
            4. 循环队列入队伪算法讲解
                    1. 将要存放的值放入r所在的位置
                    2. r = (r+1)%数组的长度
            5. 循环队列出队伪算法讲解
                       f = (f+1)%数组的长度
                       
            6. 如何判断循环队列是否为空
                    如果front与rear的值相等,则该队列就一定为空
            7. 如何判断循环队列是否已满
                    两种方式:1.多增加一个标识符参数
                                      2. if((r+1)%数组长度==f)
                                               已满
                                         else
                                               未满

队列的操作:

#include <stdio.h> #include <stdlib.h> #include <malloc.h>typedef struct queue {int * pBase;int front;int rear; }QUEUE;void init(QUEUE *); bool en_queue(QUEUE*, int val); void traverse_queue(QUEUE*); bool full_queue(QUEUE*); bool out_queue(QUEUE*,int*); bool empty_queue(QUEUE *);

创建队列:

void init(QUEUE *pQ) {pQ->pBase = (int *)malloc(sizeof(int) * 6);//队列空间大小为6个int元素pQ->front = 0;pQ->rear = 0; }

判断队列是否已满:

bool full_queue(QUEUE * pQ) {if ( (pQ->rear + 1) % 6 == pQ->front )return true;elsereturn false; }

入队:

bool en_queue(QUEUE * pQ, int val) {if ( full_queue(pQ) ){return false;}else{pQ->pBase[pQ->rear] = val;pQ->rear = (pQ->rear+1) % 6;return true;} }

遍历队列:

void traverse_queue(QUEUE * pQ) {int i = pQ->front;while (i != pQ->rear){printf("%d ", pQ->pBase[i]);i = (i+1) % 6;}printf("\n");return; }

判断队列是否为空:

bool emput_queue(QUEUE * pQ) {if ( pQ->front == pQ->rear )return true;elsereturn false; }

出队:

bool out_queue(QUEUE * pQ, int * pVal) {if ( emput_queue(pQ) ){return false;}else{*pVal = pQ->pBase[pQ->front];pQ->front = (pQ->front+1) % 6;return true;} }

 

总结

以上是生活随笔为你收集整理的(5)队列的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。