队列及其操作
隊列
隊列的定義
隊列簡稱隊,是一種受限制的線性表,僅允許在表的一端插入,在表的另一端進行刪除。
- 進行插入的一端叫做隊頭
- 進行刪除的一端叫做隊尾
隊的特點
- 先進先出(FIFO)
順序隊(循環隊列)
順序隊主要以循環隊列的形式出現
循環隊列的要素
- 隊空狀態 qu.rear == qu.front
- 隊滿狀態 (qu.rear+1)%MAXSIZE == qu.front
結構體定義
#define MAXSIZE 1024typedef struct _Queue {int data[MAXSIZE]; //數據int front; //隊首指針int rear; //隊尾指針 }SqQueue;操作
采用 p = (p+1)%MAXSIZE;而不是p++的方式移動指針是為了能保證循環再利用性,使其在超過MAXSIZE后能重新回到原始位置
否則一個隊只存滿再全部取出后就不能再利用了
初始化
//初始化循環隊列 void initQueue(SqQueue &qu) {qu.front = qu.rear = 0; }判斷隊空
//判斷隊空 //隊空返回真,否則返回假 bool isQueueEmpty(SqQueue qu) {if(qu.front == qu.rear) return true;else return false; }判斷隊滿
//判斷隊滿 //隊滿返回真,否則假 bool isQueueFull(SqQueue qu) {if((qu.rear + 1) % MAXSIZE == qu.front)return true;elsereturn false; }進隊
//進隊 bool enQueue(SqQueue &qu, int e) {//判斷隊滿if(isQueueFull(qu)) return false;//若未滿,先移動尾指針再存元素qu.rear = (qu.rear + 1) % MAXSIZE;qu.data[qu.rear] = e;return true; }出隊
//出隊 bool deQueue(SqQueue &qu, int &e) {//判斷隊空if(isQueueEmpty(qu)) return false;//若不為空,則先移動頭指針(因為等于0的時候并無元素,所以可以先移動指針)qu.front = (qu.front + 1) % MAXSIZE;e = qu.data[qu.front];return true; }鏈隊
鏈隊的要素
- 隊空狀態 lqu->rear == NULL 或 lqu->front == NULL
- 隊滿狀態不存在(假設內存無限大)
結構體定義
//儲存數據的鏈隊結點 typedef struct QNode {int data; //數據域struct QNode *next; //指針域 }QNode;//頭結點定義,用于指示隊頭和隊尾 typedef struct _LiQueue {QNode *front;QNode *rear; }LiQueue;操作
初始化
//初始化 bool initQueue(LiQueue* &lqu) {lqu = new LiQueue;if(!lqu) return false;lqu->front = lqu->rear = NULL;return true; }判斷隊空
//判斷隊空,隊空返回真,否則假 bool isQueueEmpty(LiQueue *lqu) {if(!lqu->rear || !lqu->front)return true;elsereturn false; }進隊
//入隊 bool enQueue(LiQueue* &lqu, int e) {QNode *node = new QNode;if(!node) return false;node->data = e;node->next = NULL;//若隊為空,則新結點即時隊首結點又是隊尾結點if(!lqu->rear)lqu->rear = lqu->front = node;else{lqu->rear->next = node;lqu->rear = node;}return true; }出隊
//出隊 bool deQueue(LiQueue* &lqu, int &e) {QNode *p;//判斷隊空if(!lqu->rear) return false;else p = lqu->front;//當隊中只有一個保存數據的結點時需特殊操作if(lqu->front == lqu->rear)lqu->rear = lqu->front = NULL;elselqu->front = lqu->front->next;e = p->data;delete p;return true; }總結
- 上一篇: LAN交换机自学习算法
- 下一篇: 快速幂及其模