数据结构-循环队列
2017-01-02 22:13
281 查看
//克服假溢出现象 #include <stdio.h> #include <stdlib.h> #define LIST_INIT_SIZE 10 #define LISTINCREMENT 100 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define TRUE 1 #define FALSE 0 #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define OPSETSIZE 7 #define MAXQSIZE 100 typedef int Status; typedef int ElemType; typedef int QElemType; typedef struct { QElemType *base; int front, rear; } SqQueue; Status InitQueue(SqQueue *Q); Status EnQueue(SqQueue *Q, ElemType e); Status DeQueue (SqQueue *Q, ElemType *e); int QueueLength(SqQueue Q); int main() { SqQueue Q; InitQueue(&Q); EnQueue(&Q, 1); EnQueue(&Q, 2); EnQueue(&Q, 3); EnQueue(&Q, 4); EnQueue(&Q, 5); printf("Then the length of Queue is %d\n", QueueLength(Q)); while(QueueLength(Q)) { ElemType E; DeQueue(&Q, &E); printf("DeQueue , The Elem is %d\n", E); } return 0; } Status InitQueue(SqQueue *Q) { Q->base = (ElemType *) malloc(MAXQSIZE *sizeof (ElemType)); if (!Q->base) exit (OVERFLOW); Q->front = Q->rear = 0; return OK; } Status EnQueue(SqQueue *Q, ElemType e) { if ((Q->rear+1) % MAXQSIZE == Q->front) return ERROR; Q->base[Q->rear] = e; Q->rear = (Q->rear+1) % MAXQSIZE; return OK; } Status DeQueue (SqQueue *Q, ElemType *e) { if (Q->front == Q->rear) return ERROR; *e = Q->base[Q->front]; Q->front = (Q->front + 1) % MAXQSIZE; return OK; } int QueueLength(SqQueue Q) { return (Q.rear - Q.front+MAXQSIZE) % MAXQSIZE; }
相关文章推荐
- 数据结构-顺序栈
- 数据结构-顺序表
- 数据结构-二分查找(Binary Search)
- 数据结构-二叉树(Binary Tree)
- 数据结构-多项式计算(栈实现)
- 数据结构-模式匹配串算法(KMP)
- 深入浅出Redis-redis底层数据结构(上)
- 数据结构-哈夫曼(Huffman)
- 数据结构-队列(Queue)
- 数据结构-单链表(Linked List)
- 数据结构排序问题_2
- 数据结构(十六) 线索二叉树讲解(带头节点后序加线索) 以及实现的完整代码
- 表ADT
- 5、队列
- [置顶] 数据结构与算法
- bzoj 3236 作业 莫队
- 蓝桥杯省赛试题(持续更新)
- 插入排序
- qhy数据结构期末复习题
- 浙江中医药大学-《数据结构》(C语言版)-栈、队列、串、数组