1. 程式人生 > >隊列順序存儲 - 設計與實現 - API函數

隊列順序存儲 - 設計與實現 - API函數

http 出隊 插入 tmp .cpp tdi tree 順序 位置

隊列是一種特殊的線性表
隊列僅在線性表的兩端進行操作
隊頭(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函數