数据结构之循环队列
简单实现数据结构之循环队列
#include <stdio.h> #include <stdlib.h> #include <iostream> #define OK 1 #define FALSE 0 #define ERROR -1 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 using namespace std; typedef struct { int *base; int fron, rear; int queueSize; }CirQueue; int InitCirQueue(CirQueue &Q, int QSize){ Q.base = (int *)malloc(QSize *sizeof(int)); if(!Q.base) return OVERFLOW; Q.queueSize = QSize; Q.fron = Q.rear = 0; return OK; } int queueEmpty(CirQueue &Q){ if(Q.fron == Q.rear) return TRUE; return FALSE; } void clearQueue(CirQueue &Q){ Q.fron = Q.rear = 0; } int insertQueue(CirQueue &Q, int e) { if((Q.rear+1)%Q.queueSize == Q.fron) return OVERFLOW; Q.base[Q.rear] = e; Q.rear =(Q.rear+1)%Q.queueSize; return OK; } int deleteQueue(CirQueue &Q, int &e){ if(Q.fron == Q.rear) return ERROR; e = Q.base[Q.fron]; Q.fron = (Q.fron+1)%Q.queueSize; return OK; } int GetFront(CirQueue &Q, int &e) { if(Q.fron == Q.rear) return ERROR; e = Q.base[Q.fron]; return OK; } int queueLength(CirQueue &Q) { return (Q.rear-Q.fron+Q.queueSize)%Q.queueSize; } int main() { CirQueue q; int e, N; cout << "输入队列规模:"<<endl; cin >> N; if(!InitCirQueue(q, N)) cout << "出错" << endl; for(int i=0; i<10; i++) if(!insertQueue(q, i+1)) cout << "出错" << endl; if(!queueEmpty(q)) cout << "队列非空"<<endl; if(!queueLength(q)) cout << "队列长度:0" << endl; else cout << "队列长度:" << queueLength(q) << endl; if(!GetFront(q, e)) cout << "出错" << endl; else cout << "队首元素:" << e << endl; for(int i=0; i<10; i++) if(!deleteQueue(q, e)) cout << "出错 "<<endl; else cout << "出队列:"<< e << endl; clearQueue(q); if(!queueLength(q)) cout << "队列长度:0" << endl; else cout << "队列长度:" << queueLength(q) << endl; return 0; }