【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
2011-04-14 20:59
1396 查看
所有原创文章转载请注明作者及链接
// blackboycpp(AT)gmail.com
// QQ群: 135202158
// blackboycpp(AT)gmail.com
// QQ群: 135202158
/******************************************************************** File: ArrayQueue.h Author: blackboy, blackboycpp@gmail.com Purpose: 循环队列ADT,数组实现 Created: 2011-04-01 Modified: 2011-04-01 16:43 *********************************************************************/ #ifndef __ARRAY_QUEUE_H__ #define __ARRAY_QUEUE_H__ typedef int ElementType; struct _Node; typedef struct _Node Node; typedef Node* Queue; struct _Node { int Capacity; int Size; int Front; int Rear; ElementType* Array; }; ////////////////////////////////////////////////////////////////////////// Queue CreateQueue(int); void DisposeQueue(Queue); void MakeEmpty(Queue); void EnQueue(ElementType, Queue); void DeQueue(Queue); ElementType Front(Queue); int IsEmpty(Queue); int IsFull(Queue); #endif
#include <stdlib.h> #include "ArrayQueue.h" Queue CreateQueue(int maxElement) { Queue Q = (Queue)malloc(sizeof(Node)); Q->Array = (ElementType*)malloc(sizeof(ElementType) * maxElement); Q->Capacity = maxElement; MakeEmpty(Q); return Q; } void DisposeQueue(Queue Q) { if(Q != NULL) { free(Q->Array); free(Q); } } void MakeEmpty(Queue Q) { Q->Front = 0; Q->Rear = -1; // 注意是-1 Q->Size = 0; } void EnQueue(ElementType X, Queue Q) { if(IsFull(Q)) return; if( Q->Rear == (Q->Capacity-1)) // 回绕 Q->Rear = -1; Q->Array[++Q->Rear] = X; // 注意下标先自增1 Q->Size++; } void DeQueue(Queue Q) { if(IsEmpty(Q)) return; if(Q->Front == (Q->Capacity-1)) // 回绕 Q->Front = 0; else Q->Front++; Q->Size--; } ElementType Front(Queue Q) { if(!IsEmpty(Q)) return Q->Array[Q->Front]; else return -1; } int IsEmpty(Queue Q) { return Q->Size == 0; } int IsFull(Queue Q) { return Q->Size == Q->Capacity; }
#include <stdlib.h> #include <stdio.h> #include "ArrayQueue.h" #define MAX_ELEMENTS 5 int main() { Queue Q; int val; Q = CreateQueue(MAX_ELEMENTS); EnQueue(1, Q); EnQueue(2, Q); EnQueue(3, Q); EnQueue(4, Q); EnQueue(5, Q); /* 1 2 3 4 5 * * f r */ printf("is full? %d/n", IsFull(Q)); printf("front: %d, rear: %d/n", Front(Q), Q->Array[Q->Rear]); DeQueue(Q); /* 1 2 3 4 5 * * f r */ printf("front: %d, rear: %d/n", Front(Q), Q->Array[Q->Rear]); EnQueue(6, Q); /* 6 2 3 4 5 * * r f */ printf("front: %d, rear: %d/n", Front(Q), Q->Array[Q->Rear]); DeQueue(Q); DeQueue(Q); DeQueue(Q); DeQueue(Q); /* 6 2 3 4 5 * f/r */ printf("front: %d, rear: %d/n", Front(Q), Q->Array[Q->Rear]); DeQueue(Q); /* 6 2 3 4 5 * * r f */ printf("is empty?: %d/n", IsEmpty(Q)); printf("front: %d, rear: %d/n", Front(Q), Q->Array[Q->Rear]); EnQueue(7, Q); EnQueue(8, Q); /* 6 7 8 4 5 * * f r */ printf("front: %d, rear: %d/n", Front(Q), Q->Array[Q->Rear]); DeQueue(Q); DeQueue(Q); printf("front: %d, rear: %d/n", Front(Q), Q->Array[Q->Rear]); DisposeQueue(Q); system("PAUSE"); return 0; }
相关文章推荐
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串
- 数据结构基础——循环队列的C++实现
- 数据结构基础(5)--C语言实现循环队列--静态
- 数据结构基础-队列(循环队列、链式队列)以及STL中queue的使用
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构之数组实现基础队列结构
- 五、数据结构基础之循环队列C语言实现
- 数据结构基础之循环队列C语言实现
- C# 数据结构基础-实现循环队列
- 数据结构与算法-----队列-使用数组(顺序结构)实现
- 数据结构基础(7) --循环队列的设计与实现
- C# 数据结构基础-实现循环队列
- 数据结构基础(7) --循环队列的设计与实现
- 用数组实现js中的堆栈 或者队列数据结构
- 数据结构数组相关算法和螺旋,蛇形,拉丁矩阵的实现
- 【数据结构与算法的语言基础】数组与字符串
- (4) 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- PHP实现队列(Queue)数据结构