数组实现循环队列
隊列有兩種形式:鏈式隊列和靜態隊列,靜態隊列一般用數組實現,數組的優點是集中存儲,內存訪問快,若是用數組實現,一定是循環隊列,否則會造成巨大的內存浪費。
應用場景:限流、排隊
C語言:
// // Created by zhanghaodong on 2019-02-15. // /*** 循環隊列*/ #include <stdio.h>#define MAXSIZE 10 #define OK 1 #define ERROR -1typedef int Status;typedef int QElemType;typedef struct {QElemType data[MAXSIZE];int front;/*頭指針*/int rear;/*尾指針,指向最后一個*/int size;} SqQueue;Status initQueue(SqQueue *q) {q->front = 0;q->rear = 0;q->size = 0;return OK; }int queueLen(SqQueue *q) {return q->size; }Status enQueue(SqQueue *q, QElemType e) {/*隊列滿了*/if (q->size == MAXSIZE) {return ERROR;}if (q->size > 0) {q->rear = (q->rear + 1) % MAXSIZE;}q->data[q->rear] = e;q->size++;return OK; }QElemType *deQueue(SqQueue *q) {/*隊列空了*/if (q->size == 0) {return ERROR;}QElemType *e = q->data[q->front];q->front = (q->front + 1) % MAXSIZE;q->size--;return e; }void printStr(SqQueue *q) {if (q->rear > q->front) {for (int i = q->front; i <= q->rear; ++i) {printf("%d,", q->data[i]);}} else if (q->rear < q->front) {for (int i = q->front; i < MAXSIZE; ++i) {printf("%d,", q->data[i]);}for (int k = 0; k < q->rear; ++k) {printf("%d,", q->data[k]);}} else {printf("空隊列");}printf("\n"); }int main() {SqQueue *sq;initQueue(sq);for (int i = 0; i < 12; ++i) {QElemType k = i + 100;Status st = enQueue(sq, k);printf("%d插入結果:%d\n.", k, st);}printStr(sq);for (int j = 0; j < 6; ++j) {QElemType *e = deQueue(sq);printf("取出%d\n", e);}printStr(sq);for (int p = 0; p < 7; ++p) {QElemType k = p + 200;Status st = enQueue(sq, k);printf("%d插入結果:%d\n.", k, st);}printStr(sq);return 0; }?
測試結果:
100插入結果:1 .101插入結果:1 .102插入結果:1 .103插入結果:1 .104插入結果:1 .105插入結果:1 .106插入結果:1 .107插入結果:1 .108插入結果:1 .109插入結果:1 .110插入結果:-1 .111插入結果:-1 .100,101,102,103,104,105,106,107,108,109, 取出100 取出101 取出102 取出103 取出104 取出105 106,107,108,109, 200插入結果:1 .201插入結果:1 .202插入結果:1 .203插入結果:1 .204插入結果:1 .205插入結果:1 .206插入結果:-1 .106,107,108,109,200,201,202,203,204,?
轉載于:https://www.cnblogs.com/zhanghaodong/p/10405593.html
總結
- 上一篇: 二进制安装部署 4 kubernete
- 下一篇: 随机生成颜色和透明度