• 数据结构之顺序队列实现


      
    //
    Queue.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include <stdio.h> #include <string.h> // 队列是现实生活中理想模型一种 忽略很多细节 但即使这样 依然很有用 // Task:实现一个数据队列 数组实现 任务队列 等待队列 优先级队列 循环队列 // 一生二 //空间骨骼框架: 数组 //英文名: queue //任何数据结构都不是无穷无尽 因此我们缩小10 20 个 其实很有意义的 // 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表 FIFO // 说的就是不能插队喽 乱插队
    // 没有考虑 PV操作和数据的移动 同步操作
    // 数据整体的移动

    #define MAX 10

    
    

    struct queue // 描述一小个 也能描述整体
    {
    int data[10]; // 定义域
    int head;
    int tail;
    };

    
    


    static struct queue dataqueue;

    
    


    static int queue_init(struct queue* Q)
    {

    
    

    dataqueue.head = 0;
    dataqueue.tail = 0;
    dataqueue.head = dataqueue.tail;
    memset(&dataqueue.data, 0, sizeof(dataqueue));

    
    

    }

    
    

    static int queue_insertElem(struct queue* Q, int ElemData)
    {

    
    

    if ( Q->tail >= MAX )
    {
    printf("insert data error ");
    return -1;
    }
    else
    {

    
    

    Q->data[Q->tail] = ElemData;
    Q->tail++;
    }

    
    

    return 0;
    }

    
    

    static int queue_deletElem(struct queue* Q)
    {

    
    

    if (Q->head <= Q->tail-1) // 注意数组越界 数组是从0开始计算的 不然出现从0开始的问题
    {
    // 如果Q->head 为0 刚刚就导致 Q->head 清0 这个时候就会导致 从0开始操作
    Q->data[Q->head] = 0; //下面两个是有顺序的
    Q->head++;

    
    

    }
    else
    {

    
    

    }

    
    

    printf("Q->tail is Q->head is %d %d ", Q->tail, Q->head);

    
    

    return 0;
    }

    
    

    int main()
    {

    
    


    //尾部添加数据 同步问题 尾部有数据的时候 头部才能干其他事情
    queue_insertElem(&dataqueue, 0);
    queue_insertElem(&dataqueue, 1);
    queue_insertElem(&dataqueue, 2);
    queue_insertElem(&dataqueue, 3);
    queue_insertElem(&dataqueue, 4);
    queue_insertElem(&dataqueue, 5);
    queue_insertElem(&dataqueue, 6);
    queue_insertElem(&dataqueue, 7);
    queue_insertElem(&dataqueue, 8);
    queue_insertElem(&dataqueue, 9);
    queue_insertElem(&dataqueue, 10);
    queue_insertElem(&dataqueue, 10);
    printf("dataqueue.data is %d ", dataqueue.tail);

    
    
    
    
    

    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    queue_deletElem(&dataqueue);
    printf("dataqueue.head is %d ",dataqueue.head);

    
    

    while (1);
    return 0;
    }





    实用价值: 书堆 我放书 添加task 设备驱动 一直添加 我不减
    可以想象一下 每次git push origin xxx 每次head头一直往前跑
    问题点: 在于出队列 顺序表出现假溢出问题

    一勤天下无难事。
  • 相关阅读:
    MySQL(DQL部分)
    Java函数式接口
    Java简易版生产者消费者模型
    浅谈Java三种实现线程同步的方法
    Linux常用命令
    计算机组成原理笔记
    资煌麻辣烫——事后诸葛亮
    资煌麻辣烫——冲刺集合
    资煌麻辣烫——测试总结
    资煌麻辣烫——冲刺总结
  • 原文地址:https://www.cnblogs.com/nowroot/p/12650019.html
Copyright © 2020-2023  润新知