14-数据结构_队列-算法实现
2013-07-30 22:20
513 查看
---------------------------------
定义 循环队列
初始化 队列
入队
出队
遍历
是否已满
是否已空
---------------------------------
定义 循环队列
初始化 队列
入队
出队
遍历
是否已满
是否已空
---------------------------------
定义 循环队列
// 定义 循环队列 typedef struct Queue { int * pBase;// 底层数组 int front; // 队首 下标 int rear; // 队尾 下标 } QUEUE;
初始化 队列
// 初始化 队列 void init(QUEUE * qQueue) { printf("输入循环队列的长度 : "); scanf("%d", &queueLen); // 数组 qQueue->pBase = (int *) malloc( sizeof(int) * queueLen ); // qQueue->front = 0; qQueue->rear = 0; return; }
入队
// 入队 bool enterQueue(QUEUE * pQueue, int value) { if ( isFull(pQueue) ) { return false; } // 在 rear 索引处 放入值 pQueue->pBase[pQueue->rear] = value; // rear 索引 加1 pQueue->rear = (pQueue->rear + 1) % queueLen; return true; }
出队
// 出队 bool outQueue(QUEUE * pQueue, int * pValue) { if ( isEmpty(pQueue) ) { return false; } // 记录出队的元素的值 *pValue = pQueue->pBase[pQueue->front]; // 出队 pQueue->front = (pQueue->front + 1) % queueLen; return true; }
遍历
// 遍历 void traverseQueue(QUEUE * pQueue) { printf("======遍历======\n"); int start = pQueue->front; for (; start != pQueue->rear; start = (start + 1) % queueLen) { printf("%d\n", pQueue->pBase[start]); } return; }
是否已满
// 判断队列是否已满 bool isFull(QUEUE * pQueue) { if ( (pQueue->rear + 1) % queueLen == pQueue->front ) { return true; } return false; }
是否已空
// 判断队列是否已空 bool isEmpty(QUEUE * pQueue) { if (pQueue->rear == pQueue->front) { return true; } return false; }
完整代码 07-queue.c
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>
int queueLen; // 全局变量, 队列长度
// 定义 循环队列 typedef struct Queue { int * pBase;// 底层数组 int front; // 队首 下标 int rear; // 队尾 下标 } QUEUE;
// 初始化 队列
void init(QUEUE * qQueue);
// 入队
bool enterQueue(QUEUE * pQueue, int value);
// 出队
bool outQueue(QUEUE * pQueue, int * pValue);
// 遍历
void traverseQueue(QUEUE * pQueue);
// 判断队列是否已满
bool isFull(QUEUE * pQueue);
// 判断队列是否已空
bool isEmpty(QUEUE * pQueue);
int main(void)
{
QUEUE queue;
// 初始化
init(&queue);
// 入队
int count;
for (count = 0; count < 4; ++count)
{
if ( ! enterQueue(&queue, count + 1) )
{
printf("%d, 入队失败!!!\n", count + 1);
continue;
}
printf("%d, 入队成功!\n", count + 1);
}
// 遍历
traverseQueue(&queue);
// 出队
int value;
for (count = 0; count < 13; ++count)
{
if (outQueue(&queue, &value))
{
printf("出队成功, 出队元素的值: %d\n", value);
continue;
}
printf("出队失败, 再接再励!!\n");
}
traverseQueue(&queue);
return 0;
}
// 初始化 队列 void init(QUEUE * qQueue) { printf("输入循环队列的长度 : "); scanf("%d", &queueLen); // 数组 qQueue->pBase = (int *) malloc( sizeof(int) * queueLen ); // qQueue->front = 0; qQueue->rear = 0; return; }
// 入队 bool enterQueue(QUEUE * pQueue, int value) { if ( isFull(pQueue) ) { return false; } // 在 rear 索引处 放入值 pQueue->pBase[pQueue->rear] = value; // rear 索引 加1 pQueue->rear = (pQueue->rear + 1) % queueLen; return true; }
// 判断队列是否已满 bool isFull(QUEUE * pQueue) { if ( (pQueue->rear + 1) % queueLen == pQueue->front ) { return true; } return false; }
// 遍历 void traverseQueue(QUEUE * pQueue) { printf("======遍历======\n"); int start = pQueue->front; for (; start != pQueue->rear; start = (start + 1) % queueLen) { printf("%d\n", pQueue->pBase[start]); } return; }
// 出队 bool outQueue(QUEUE * pQueue, int * pValue) { if ( isEmpty(pQueue) ) { return false; } // 记录出队的元素的值 *pValue = pQueue->pBase[pQueue->front]; // 出队 pQueue->front = (pQueue->front + 1) % queueLen; return true; }
// 判断队列是否已空 bool isEmpty(QUEUE * pQueue) { if (pQueue->rear == pQueue->front) { return true; } return false; }
相关文章推荐
- 利用python的双向队列(Deque)数据结构实现回文检测的算法
- C#数据结构和算法学习系列七----队列、队列的实现和应用
- 算法与数据结构 其四 循环队列的实现
- 数据结构和算法--队列的数组实现
- 数据结构与算法之三(栈和队列的java实现)
- 算法与数据结构-栈与队列 讲解与java代码实现
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
- 数据结构和算法--队列的链式实现
- 微软等数据结构+算法面试100题(33)--用俩个栈实现队列
- Python实现的数据结构与算法之双端队列详解
- 用Python实现的数据结构与算法:队列
- 算法与数据结构-队列的基本操作C语言实现
- 【算法和数据结构】线性表(四)用两个栈来实现队列(C++实现)
- 数据结构和算法设计(迷宫求解问题的栈和队列的实现)
- 算法与数据结构【四】——C语言实现循环队列
- 【数据结构和算法】java 队列实现
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
- C++类模板 实现循环队列的顺序存储结构算法 《数据结构》(北京科海) 部分摘抄 自己编写实现
- 数据结构C语言实现之链式队列的6种算法代码
- 微软等数据结构+算法面试100题(14)--实现strstr 功能