迴圈佇列的基本操作
主要的功能:1)迴圈佇列的初始化
2)求迴圈佇列的長度
3)迴圈佇列的插入刪除操作
4) 判斷迴圈佇列是否為空,是否已經滿了
5)遍歷迴圈佇列
主要的原理:
1)初始化 front = rear = 0;
2)為空 front = rear
3)已滿 front=(rear+1)%size
4) 插入 rear = (rear+1)%size
5)刪除 front=(front+1)%size
程式碼如下:
/****************************************************************************
author---bigship
date----2014.10.24
*****************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
const int Size = 100;//迴圈佇列的大小
template <class T>
struct Queue
{
T *base;
int front;
int rear;
void init(){//初始化佇列
base = (T *)malloc(sizeof(T)*Size);
front=rear=0;
}
bool empty(){//判斷佇列是否為空
if(front==rear)
return true;
return false;
}
bool full(){//判斷是否已經滿了
if((rear+1)%Size==rear)
return true;
return false;
}
void push(T x){//插入元素
if(full()){
printf("The queue is full\n");
return ;
}
base[rear] = x;
rear = (rear + 1)%Size;
}
void pop(){//刪除隊首元素
if(empty()){
printf("The queue is empty\n");
return ;
}
front=(front+1)%Size;
}
T top(){//返回隊首元素
return base[front];
}
int length(){//佇列長度
return (rear-front+Size)%Size;
}
void destroy(){//銷燬佇列
if(base) free(base);
base = NULL;
rear=front;
}
void visit(){//遍歷佇列
if(empty()){
printf("the queue is empty");
return ;
}
int tmp = front;
while(tmp!=rear){
printf("%d ",base[tmp]);
tmp=(tmp+1)%Size;
}
puts("");
}
};
int main()
{
Queue<int > q;
q.init();
for(int i=0;i<20;i++)
q.push(i);
printf("top %d\n",q.top());
printf("length %d\n",q.length());
q.push(21);
printf("length %d\n",q.length());
q.visit();
q.pop();
printf("top %d\n",q.top());
q.visit();
q.destroy();
q.visit();
return 0;
}
相關文章
- 佇列 和 迴圈佇列佇列
- 佇列的基本操作佇列
- 佇列的一種實現:迴圈佇列佇列
- 自定義單連結串列佇列的基本介面函式(非迴圈佇列)佇列函式
- 佇列的順序儲存--迴圈佇列的建立佇列
- 佇列 手算到機算 入門 佇列 迴圈佇列佇列
- Laravel 佇列基本操作Laravel佇列
- LeetCode 迴圈佇列LeetCode佇列
- Java版-資料結構-佇列(迴圈佇列)Java資料結構佇列
- 順序佇列基本操作佇列
- 事件迴圈與任務佇列事件佇列
- 迴圈佇列C++實現佇列C++
- 靜態佇列,迴圈陣列實現佇列陣列
- 迴圈佇列的實現及細節佇列
- 順序迴圈佇列的介面設計佇列
- c/c++線性迴圈佇列C++佇列
- 手擼MQ訊息佇列——迴圈陣列MQ佇列陣列
- Throwing cards away I(queue迴圈佇列)佇列
- 實驗四 棧和佇列的基本操作佇列
- 基於迴圈佇列的BFS的原理及實現佇列
- 【小白學演算法】3. 迴圈佇列演算法佇列
- 資料結構——迴圈佇列PTA習題資料結構佇列
- 【資料結構】迴圈佇列的實現(c++)資料結構佇列C++
- 【資料結構】迴圈佇列的front,rear指標以及佇列滿的條件、計算佇列長度資料結構佇列指標
- 資料結構-迴圈佇列(Python實現)資料結構佇列Python
- node事件迴圈和訊息佇列簡單分析事件佇列
- Android Handler機制之迴圈訊息佇列的退出Android佇列
- js陣列操作--使用迭代方法替代for迴圈JS陣列
- 【資料結構】迴圈佇列 C語言實現資料結構佇列C語言
- 陣列迴圈陣列
- C 語言實現使用靜態陣列實現迴圈佇列陣列佇列
- C 語言實現使用動態陣列實現迴圈佇列陣列佇列
- 資料結構實驗5、鏈佇列的基本操作資料結構佇列
- 深入分析Node.js事件迴圈與訊息佇列Node.js事件佇列
- 雙向迴圈連結串列基本操作的實現(C語言)C語言
- 陣列迴圈移位陣列
- 18. 再說迴圈~列表和迴圈的高階操作
- LeetCode題解:641. 設計迴圈雙端佇列,使用佇列,JavaScript,詳細註釋LeetCode佇列JavaScript