线性表:顺序队列算法实现
生活随笔
收集整理的這篇文章主要介紹了
线性表:顺序队列算法实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序隊列介紹
順序隊列是隊列的順序存儲結構,順序隊列實際上是運算受限的順序表。我們知道隊列是一種先將先出的數據結構,它是一種受限制的線性表,我們的順序隊列是一種隊列,采用的是順序存儲結構。與其對應的是采用鏈式存儲結構的隊列 也就是鏈式隊列。順序隊列通常采用一維數組進行存儲。所以呢本次編寫順序隊列 就采用前面封裝好的動態數組唄。動態數組你知道么,不知道請看:數據結構與算法:動態數組(利用萬能指針實現任意類型數組操作)
順序隊列相關算法接口
對外提供SeqQueue類型也就是void* 類型 對用戶隱藏底層實現。
#pragma once #ifndef __SEQQUEUE_H__ #define __SEQQUEUE_H__ typedef void* SeqQueue; typedef enum {FALSE,TRUE} Boolean;//初始化 SeqQueue Init_SeqQueue();//入隊 Boolean Push_SeqQueue(SeqQueue queue ,void* data);//出隊 void* Pop_SeqQueue(SeqQueue queue);//返回隊頭元素 void* Front_SeqQueue(SeqQueue queue);//返回隊尾元素 void* Rear_SeqQueue(SeqQueue queue);//返回隊元素個數 int Size_SeqQueue(SeqQueue queue);//返回隊是否為空 int IsEmpty_SeqQueue(SeqQueue queue);//銷毀隊列 void Destroy_SeqQueue(SeqQueue queue);#endif // !__SEQQUEUE_H__順序隊列相關算法實現
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include "DynamicArray.h" #include "SeqQueue.h" #define MAXSIZE 1024//初始化 SeqQueue Init_SeqQueue() {DynamicArray *arr = Init_DynamicArray(MAXSIZE);return arr; }//入隊 從隊尾入隊 Boolean Push_SeqQueue(SeqQueue queue, void* data) {if (queue == NULL || data == NULL){return FALSE;}DynamicArray *arr = queue;//隊滿if (arr->m_size == MAXSIZE){return FALSE;}InsertByIndex_DynamicArray(arr, data, arr->m_size);return TRUE; }//出隊 從隊頭出隊 void* Pop_SeqQueue(SeqQueue queue) {if (queue == NULL){return NULL;}DynamicArray *arr = queue;//隊空if (arr->m_size == 0){return NULL;}return RemoveByIndex_DynamicArray(arr, 0); }//返回隊頭元素 void* Front_SeqQueue(SeqQueue queue) {if (queue == NULL){return NULL;}DynamicArray *arr = queue;//隊空if (arr->m_size == 0){return NULL;}return arr->pArr[0]; }//返回隊尾元素 void* Rear_SeqQueue(SeqQueue queue) {if (queue == NULL){return NULL;}DynamicArray *arr = queue;//隊空if (arr->m_size == 0){return NULL;}return arr->pArr[arr->m_size-1]; }//返回隊元素個數 int Size_SeqQueue(SeqQueue queue) {if (queue == NULL){return 0;}DynamicArray *arr = queue;return arr->m_size; }//返回隊是否為空 Boolean IsEmpty_SeqQueue(SeqQueue queue) {if (Size_SeqQueue(queue) == 0){return TRUE;}return FALSE; }//銷毀隊列 void Destroy_SeqQueue(SeqQueue queue) {if (queue == NULL){return;}DynamicArray *arr = queue;Destroy_DynamictArray(arr); }代碼運行檢測
Main.c測試代碼
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include "SeqQueue.h" //用結構體測試 數據 typedef struct Person {char name[64];int age; }Person;int main(int argc, char *argv[]) {Person p1 = { "Lily",11 };Person p2 = { "Laymond",21 };Person p3 = { "John",31 };Person p4 = { "Leo",41 };Person p5 = { "Zeo",51 };SeqQueue queue = Init_SeqQueue();Push_SeqQueue(queue, &p1);Push_SeqQueue(queue, &p2);Push_SeqQueue(queue, &p3);Push_SeqQueue(queue, &p4);Push_SeqQueue(queue, &p5);printf("隊頭元素:name=%s,age=%d\n", ((Person*)Front_SeqQueue(queue))->name, ((Person*)Front_SeqQueue(queue))->age);printf("隊尾元素:name=%s,age=%d\n", ((Person*)Rear_SeqQueue(queue))->name, ((Person*)Rear_SeqQueue(queue))->age);printf("隊列的元素個數:%d\n", Size_SeqQueue(queue));Person* p = NULL;printf("將隊列的元素依次出隊\n");while (!IsEmpty_SeqQueue(queue)){p = Pop_SeqQueue(queue);printf("name=%s,age=%d\n", p->name, p->age);}printf("隊列的元素個數:%d\n", Size_SeqQueue(queue));Destroy_SeqQueue(queue);return 0; }運行結果
總結
以上是生活随笔為你收集整理的线性表:顺序队列算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++面试题—链表中倒数第k个结点
- 下一篇: C 配置文件