• 队列


    /*    队列:
        1、什么叫队列:一个能够实现先进先出的存储结构
        2、队列的分类:链式队列,静态队列(数组队列)
        3、队列的参数:front,rear
    
        静态队里:
        1、静态队列为什么是循环队列:队列先进先出,不管我入队还是出队,front rear都得++,往上走。
            当删除的时候,f往上走,内存就泄露。所以我需要用循环来解决这个问题。内存最大利用化。
        2、循环队列需要几个参数来确定:循环队列需要两个参数来确定,front,rear 
        3、循环队列各个参数的含义:front,rear是数组的下标,而不是指针
            front:表示队列的第一个元素
            rear:表示队列最后一个有效元素的下一个
            队列的初始化:front rear都为零的时候
            front rear的值相等,但不一定为零
        4、循环队列入队伪算法:将值存入r所代表的位置,然后把r往后走,
            错误的写法:rear=rear+1;rear=(rear+1)% 队列的长度
        5、循环队列出队伪算法:front=(front+1)% 数组的长度
        6、如何判断循环队列为空:front=rear; 
        7、如何判断循环队列已满:front=(rear+1)% 数组的长度,否则不满
        队列的长度是n,队列只能存储n-1个值,必须有一个为空,便于操作
        8、队列的应用:凡是与时间有关的,都有队列的影子
    */
    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    typedef struct queue
    {
        int * pBase;
        int front;
        int rear;
    }Queue, * pQueue;
    typedef int bool;
    #define true 1
    #define false 0
    void init_queue(Queue *);
    bool out_queue(Queue *, int *);
    bool is_empty(pQueue);
    bool is_full(pQueue);
    bool en_queue(pQueue, int);
    void traverse_queue(const pQueue);
    int main(void)
    {
        Queue Q;
        int val;
        init_queue(&Q);
        en_queue(&Q, 44);
        en_queue(&Q, 38);
        en_queue(&Q, 23);
        en_queue(&Q, 49);
        en_queue(&Q, 65);
        en_queue(&Q, 97);
        en_queue(&Q, 8);
        en_queue(&Q, 9);
        traverse_queue(&Q);
        out_queue(&Q, &val);
        traverse_queue(&Q);
        out_queue(&Q, &val);
        
        return 0;
    }
    void init_queue(Queue * pQ)
    {
        pQ->pBase=(int *)malloc(sizeof(int)*7);//个体存储+个体关系的存储
        if(pQ->pBase==NULL)
        {
            puts("内存分配失败!");
            exit(-1);
        }
        pQ->front=0;
        pQ->rear=0;
        return;
    }
    
    bool out_queue(pQueue pQ, int * pVal)
    {
        if( is_empty(pQ) )
            return false;
        *pVal=pQ->pBase[pQ->front];
        printf("出队的数是:%d
    ",*pVal);
        pQ->front=(pQ->front+1)%7;
        
        return true;
    }
    bool is_empty(pQueue pQ)
    {
        if( pQ->front== pQ->rear )
            return true;
        else
            return false;
    }
    bool en_queue(pQueue pQ, int val)
    {
        if( is_full(pQ) )
            return false;
        else
        {
            pQ->pBase[pQ->rear]=val;
            pQ->rear=(pQ->rear+1)%7;
            return true;
        }
    }
    bool is_full(pQueue pQ)
    {
        if( (pQ->rear+1)%7==pQ->front )
            return true;
        else
            return false;
    }
    
    void traverse_queue(const pQueue pQ)
    {
        while( (pQ->front+1)%7 != pQ->rear )
        {
            printf("%d	",pQ->pBase[pQ->front]);
            pQ->front=(pQ->front+1)%7;
            
        }
        putchar('
    ');
        return;
    }
  • 相关阅读:
    Java数据处理,Map中数据转double并取小数点后两位
    19年7月份面试7家公司,整理的java面试题(答案自行百度解决,也是个学习的过程)
    2019阿里云面试题,竟然现场敲代码,现在的企业越来越实在了
    解决win10状态栏的搜索框无法搜索本地应用或无反应
    sql,按照时间排序,取前N条
    List数组排序
    阿里云的maven仓库 地址
    hashcode相等两个类一定相等吗?equals呢?相反呢?
    杂记
    java排序
  • 原文地址:https://www.cnblogs.com/fengkui/p/6117948.html
Copyright © 2020-2023  润新知