数据结构-静态循环队列(C语言实现)

2021-09-22 17:13

阅读:916

标签:入队   出队   分配   容量   元素   初始   表示   最大   内存   1. 导入头文件 编写代码过程中,涉及动态内存分配等常用的函数,需要引入如下头文件 #include #include 2. 结构体定义 len 表示初始化时的数组长度,队列的最大容量为len-1 typedef struct Queue { int * pData; // 数据存放数组 int front; // 队头索引 int tail; // 队尾索引 int len; // 队列长度 } QUEUE; 3. 函数声明 void init(QUEUE * pQueue, int length); // 初始化 int isEmpty(QUEUE * pQueue); // 是否为空 int isFull(QUEUE * pQueue); // 是否已满 void enQueue(QUEUE * pQueue, int val); // 入队 void deQueue(QUEUE * pQueue, int *val); // 出队 void show(QUEUE * pQueue); // 列出所有元素 4. 队列初始化 初始时队列的头尾的索引都是 0 void init(QUEUE * pQ, int len) { pQ->pData = (int *)malloc(sizeof(int ) * len); if (pQ->pData == NULL) { printf("内存分配失败"); exit(-1); } pQ->front = 0; pQ->tail = 0; pQ->len = len; } 5. 队列是否为空 int isEmpty(QUEUE * pQ) { if (pQ->front == pQ->tail) { return 1; } return 0; } 6. 队列是否满 循环队列需要取余操作 int isFull(QUEUE * pQ) { if ((pQ->tail + 1)%(pQ->len)==pQ->front) { return 1; } return 0; } 7. 入队操作 void enQueue(QUEUE * pQ, int val) { if (isFull(pQ)) { printf("队列已满"); return; } pQ->pData[pQ->tail] = val; pQ->tail = (pQ->tail + 1) % (pQ->len); } 8. 出队操作 void deQueue(QUEUE * pQ, int *val) { if (isEmpty(pQ)) { printf("队列为空"); return; } *val = pQ->pData[pQ->front]; pQ->front = (pQ->front + 1)%(pQ->len); } 9.列出所有元素 front 的索引不一定比 tail 小,所以便利时 i 也要取余 void show(QUEUE * pQ) { if (isEmpty(pQ)) { printf("队列为空"); return; } int i = pQ->front; while ((i % pQ->len) != pQ->tail) { printf("%d,", pQ->pData[i]); i++; } printf("\n"); } 10. main函数 int main() { int val; QUEUE q; init(&q, 5); enQueue(&q, 1); enQueue(&q, 2); enQueue(&q, 3); enQueue(&q, 4); //enQueue(&q, 5); show(&q); deQueue(&q, &val); deQueue(&q, &val); show(&q); enQueue(&q, 6); enQueue(&q, 7); show(&q); return 0; } 数据结构-静态循环队列(C语言实现)标签:入队   出队   分配   容量   元素   初始   表示   最大   内存   原文地址:https://www.cnblogs.com/sugare/p/13166965.html


评论


亲,登录后才可以留言!