// Queue.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include#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\n");
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\n", 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\n", 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\n",dataqueue.head);
while (1);
return 0;
}
实用价值: 书堆 我放书 添加task 设备驱动 一直添加 我不减
可以想象一下 每次git push origin xxx 每次head头一直往前跑
问题点: 在于出队列 顺序表出现假溢出问题