隊列順序存儲 - 設計與實現 - API函數
阿新 • • 發佈:2017-07-23
http 出隊 插入 tmp .cpp tdi tree 順序 位置
有關順序存儲表的相關內容,請參看我的還有一篇博文:線性表的順序存儲設計和實現 - API函數實現
隊列是一種特殊的線性表
隊列僅在線性表的兩端進行操作
隊頭(Front):取出數據元素的一端
隊尾(Rear):插入數據元素的一端
隊列不同意在中間部位進行操作!
queue經常使用操作
銷毀隊列
清空隊列
進隊列
出隊列
獲取隊頭元素
獲取隊列的長度
隊列也是一種特殊的線性表;能夠用線性表順序存儲來模擬隊列。
主要代碼:
// seqqueue.h // 順序存儲隊列API聲明 #ifndef _MY_SEQQUEUE_H_ #define _MY_SEQQUEUE_H_ typedef void SeqQueue; // 創建隊列 SeqQueue* SeqQueue_Create(int capacity); // 銷毀隊列 void SeqQueue_Destroy(SeqQueue* queue); // 清空隊列 void SeqQueue_Clear(SeqQueue* queue); // 入隊列 int SeqQueue_Append(SeqQueue* queue, void* item); // 出隊列 void* SeqQueue_Retrieve(SeqQueue* queue); // 獲取對頭元素 void* SeqQueue_Header(SeqQueue* queue); // 獲取隊列長度 int SeqQueue_Length(SeqQueue* queue); // 獲取隊列容量 int SeqQueue_Capacity(SeqQueue* queue); #endif //_MY_SEQQUEUE_H_
// seqqueue.cpp // 順序存儲隊列API實現 // 調用了順序存儲表的API #include <stdio.h> #include "seqqueue.h" #include "seqlist.h" // 創建隊列相當於創建一個鏈表 SeqQueue* SeqQueue_Create(int capacity) { return SeqList_Create(capacity); } // 銷毀隊列相當於銷毀鏈表 void SeqQueue_Destroy(SeqQueue* queue) { SeqList_Destroy(queue); return; } // 清空隊列相當於清空鏈表 void SeqQueue_Clear(SeqQueue* queue) { SeqList_Clear(queue); return; } // 入隊列相當於在鏈表尾部插入元素 int SeqQueue_Append(SeqQueue* queue, void* item) { return SeqList_Insert(queue, item, SeqList_Length(queue)); } // 出隊列相當於刪除鏈表0號位置的元素 void* SeqQueue_Retrieve(SeqQueue* queue) { return SeqList_Delete(queue, 0); } // 獲取對頭元素相當於獲取鏈表0號位置元素 void* SeqQueue_Header(SeqQueue* queue) { return SeqList_Get(queue, 0); } // 獲取隊列長度相當於獲取鏈表長度 int SeqQueue_Length(SeqQueue* queue) { return SeqList_Length(queue); } // 獲取隊列容量相當於獲取鏈表容量 int SeqQueue_Capacity(SeqQueue* queue) { return SeqList_Capacity(queue); }
// main.cpp // 順序存儲隊列API的測試程序 #include <stdio.h> #include "seqqueue.h" const int maxn = 10; void play() { int i = 0, a[maxn]; SeqQueue *sq = NULL; for (i = 0; i < maxn; ++i) { a[i] = i + 1; } sq = SeqQueue_Create(20); // 創建隊列 // 入隊列 for (i = 0; i < maxn; ++i) { SeqQueue_Append(sq, &a[i]); } // 獲取隊列屬性 printf("header: %d\n", *((int *)SeqQueue_Header(sq))); printf("length: %d\n", SeqQueue_Length(sq)); printf("capacity: %d\n", SeqQueue_Capacity(sq)); // 出隊列 while (SeqQueue_Length(sq)) { int tmp = *((int *)SeqQueue_Retrieve(sq)); printf("%d\n", tmp); } SeqQueue_Destroy(sq); } int main() { play(); return 0; }
有關順序存儲表的相關內容,請參看我的還有一篇博文:線性表的順序存儲設計和實現 - API函數實現
具體project代碼:Github
隊列順序存儲 - 設計與實現 - API函數