队列(C语言版)

本文深入讲解了循环队列的基本概念及其实现原理,包括队列的初始化、入队与出队操作,并通过C语言示例代码展示了循环队列的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.队列 (先进先出(first in first out ,缩写FIFO)的线性表)</span>

a.链式队列----队列的链式表示和实现

2.循环队列

一、循环队列的基础知识

1.循环队列需要几个参数来确定

循环队列需要2个参数,front和rear

2.循环队列各个参数的含义

(1)队列初始化时,front和rear值都为零;

(2)当队列不为空时,front指向队列的第一个元素,rear指向队列最后一个元素的下一个位置;

(3)当队列为空时,front与rear的值相等,但不一定为零,即队空时: front=rear

(4)当 队满时: (rear+1)%maxsize=front

3.循环队列入队的伪算法

(1)把值存在rear所在的位置;

(2)rear=(rear+1)%maxsize ,其中maxsize代表数组的长度;

  

              

/////////////////////////////////////////  
    //   
    // author: kangquan2008@csdn  
    //  
    /////////////////////////////////////////  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <stdbool.h>  
      
    #define QUEUE_SIZE 10  
    #define EN_QUEUE 1  
    #define DE_QUEUE 2  
    #define EXIT     3  
      
    typedef int    Item;  
    typedef struct QUEUE{  
      
        Item * item;  
        int front;  
        int tear;  
      
    }Queue;  
      
    int init_queue(Queue * queue)  
    {  
        queue->item = malloc(QUEUE_SIZE * sizeof(Item));  
        if(!queue->item)  
        {  
            printf("%s\n","Alloc failed,not memory enough");  
            exit(EXIT_FAILURE);  
        }  
      
        queue->front = queue->tear = 0;  
      
        return 1;  
    }  
      
    int en_queue(Queue * queue, Item item)  
    {  
        if((queue->tear+1) % QUEUE_SIZE == queue->front)  
        {  
            printf("%s\n","The queue is full");  
            return -1;  
        }  
      
        queue->item[queue->tear] = item;  
        queue->tear = (queue->tear + 1) % QUEUE_SIZE;  
      
        return 1;  
    }  
      
    int de_queue(Queue * queue, Item * item)  
    {  
        if(queue->front == queue->tear)  
        {  
            printf("%s\n","The queue is empty");  
            return -1;  
        }  
      
        (*item) = queue->item[queue->front];  
        queue->front = (queue->front + 1) % QUEUE_SIZE;  
      
        return 1;  
    }  
      
    int queue_length(<span style="font-family: Arial, Helvetica, sans-serif;">Queue * queue</span>)
    {
<span style="white-space:pre">	</span>return (queue.rear - queue.front +  <span style="font-family: Arial, Helvetica, sans-serif;">QUEUE_SIZE </span> )%<span style="font-family: Arial, Helvetica, sans-serif;">QUEUE_SIZE </span>;
    }

    int destroy_queue(Queue * queue)  
    {  
        free(queue->item);  
    }  
      
    int main()  
    {  
        Queue que;  
        init_queue(&que);  
        int elem;  
        bool flag = true;  
        while(flag)  
        {  
            int choice;  
            printf("1 for en_queue,2 for de_queue,3 for exit\r\nplease input:");  
            scanf("%d",&choice);  
      
            switch((choice))  
            {  
                case EN_QUEUE:  
                    printf("input a num:");  
                    scanf("%d",&elem);  
                    en_queue(&que,elem);  
                    break;  
                case DE_QUEUE:  
                    if(de_queue(&que,&elem) == 1)  
                        printf("front item is:%d\n",elem);  
                    break;  
                case EXIT:  
                    flag = false;  
                    break;  
                default:  
                    printf("error input\n");  
                    break;  
            }  
        }  
      
        destroy_queue(&que);  
        return 0;  
    }  

http://blog.youkuaiyun.com/lpp0900320123/article/details/20694409
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值