栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

队列 queue

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

队列 queue

数据结构 – 队列

队列
  • 数据结构 -- 队列
    • 一、原理
    • 二、队列声明
    • 三、队列初始化
    • 四、队列释放
    • 五、判断 空/ 满
    • 六、入队/ 出队
    • 六、main
    • 总结:


一、原理
  1. 先进先出:【 first in first out 】
  2. 第一个元素称为:首元素,尾元素:
二、队列声明
#include 
#include 

typedef struct queue{
    int *arr; //首地址
    int cap;  //容量
    int size; //有效数据个数
    int front;//前端(出队)
    int rear; //后端(入队)
}queue_t;
三、队列初始化
void queue_init(queue_t *queue, int cap)
{
    queue->arr=(int *)malloc(cap*sizeof(queue->arr[0]));//分配内存
    queue->cap=cap; //容量0
    queue->size=0;//有效数据为0
    queue->front=0;//前为0
    queue->rear=0;//后为0 
}
四、队列释放
void queue_deinit(queue_t *queue)
{
    free(queue->arr);//清空
    queue->cap=0; 
    queue->size=0;
    queue->front=0;
    queue->rear=0;
}
五、判断 空/ 满
//判断是否队列满了
int queue_full(queue_t *queue) 
{
    return (queue->size) >= (queue->cap);
}

//判断是否队列空了
int queue_empty(queue_t *queue) 
{
    return !(queue->size) ;
}
六、入队/ 出队
  1. 入队 push
void push_queue(queue_t *queue,int data)
{
    if(queue->rear >= queue->cap)
    	queue->rear=0;		//如果队列的前面有空位置,重新定位rear
     				//让队列变成一个循环队列
    queue->arr[queue->rear++]=data; 
    queue->size++;
}
  1. 出队 pop
int pop_queue(queue_t *queue)
{
    if(queue->front >= queue->cap)
		queue->front=0;		//取到队尾,然后还有数据,需要重新定位front
    queue->size--;
    return queue->arr[queue->front++];
}
六、main
int main(void)
{
    //定义队列
    queue_t queue;
    //初始化队列
    queue_init(&queue,4);
    //入队 10 20 30 40
    for(int i=10;i<=40;i +=10){
         if(!queue_full(&queue)) {
         	queue_push(&queue,i);                               
         }
    }
    //出队 10 20  
    for(int i=0;i<2;i++){
        if(!queue_empty(&queue)){
            printf("%dn",queue_pop(&queue));        
        }            
    }
    //入队:50 60 
    for(int i=50;i<=60;i+=10){ 
            if(!queue_full(&queue)){
                queue_push(&queue,i);            
            }
    }
    //整体出队
    while(!queue_empty(&queue)){
        printf("%d",queue_pop(&queue));    
    }
    
    //销毁队列
    queue_deinit(&queue);
    return 0;
}
总结:
  1. 常见队列原理+使用
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号