国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

循環隊列(C語言)

2019-11-09 17:14:00
字體:
來源:轉載
供稿:網友
#ifndef _CYCLEQUEUE_H_#define _CYCLEQUEUE_H_#define TRUE 1#define FALSE 0#define OK 1 #define ERROR 0/*-------------------------------------------------// 循環隊列結構的定義---------------------------------------------------*/ //定義循環隊列空間大小 #define QUEUESIZE 20 //定義數據類型 typedef int ElemType ; //定義程序返回狀態類型 typedef int State; //循環隊列存儲結構 typedef struct Queue { ElemType data[QUEUESIZE];//存儲隊列元素 int front;//隊列頭指針 int rear;//隊列尾指針 int count;//隊列元素個數 }CycleQueue; /*----------------------------------------------------// 鏈式隊列的基本操作----------------------------------------------------*/int InitCycleQueue(CycleQueue *Que);int CycleQueueEmpty(CycleQueue *Que);int CycleQueueFull(CycleQueue *Que);int CycleQueueLength(CycleQueue *Que);int GetCycleHead(CycleQueue *Que, ElemType *e);int CycleQueueTraverse(CycleQueue *Que, void (*fp)(ElemType));int ClearCycleQueue(CycleQueue *Que);int PushCycleQueue(CycleQueue *Que, ElemType *e);int PopCycleQueue(CycleQueue *Que, ElemType *e);int PRintCycleQueue(CycleQueue *Que);#endif#include <stdlib.h>#include <malloc.h>#include <memory.h>#include <assert.h>#include "cyclequeue.h"/*----------------------------------------------------操作目的: 初始化隊列初始條件: 無操作結果: 函數參數: CycleQueue *Q 待初始化的隊列返回值: bool 操作是否成功----------------------------------------------------*/int InitLinkQueue(CycleQueue *Que){ Que->front = Que->rear = 0; Que->count = 0; return TRUE;}//判斷隊列為空和滿 //1、使用計數器count,隊列為空和滿時,front都等于rear //2、少用一個元素的空間,約定隊列滿時:(rear+1)%QUEUESIZE=front,為空時front=rear //rear指向隊尾元素的下一個位置,始終為空;隊列的長度為(rear-front+QUEUESIZE)%QUEUESIZE /************************************************* Function: CycleQueueEmpty Description: 隊列是否為空 Input: 隊列指針 CycleQueue *Que Output: Return: 為空返回TRUE,否則返回FALSE Others: *************************************************/ int CycleQueueEmpty(CycleQueue *Que) { if(Que->count == 0) return TRUE; else return FALSE; } /************************************************* Function: CycleQueueFull Description: 隊列是否為滿 Input: 隊列指針 CycleQueue *queue Output: Return: 為滿返回TRUE,否則返回FALSE Others: *************************************************/ State CycleQueueFull(CycleQueue *Que) { if(Que->count == QUEUESIZE) return TRUE; else return FALSE; }/************************************************* Function: PushCycleQueue Description: 入隊 Input: 隊列指針 CycleQueue *queue 數據元素 ElemType e Output: Return: 成功返回OK,失敗返回ERROR Others: *************************************************/ int PushCycleQueue(CycleQueue *Que, ElemType *e) { //驗證隊列是否已滿 if(Que->count == QUEUESIZE) { printf("PushCycleQueue fail: The queue is full/n"); return ERROR; } //入隊 Que->data[Que->rear] = *e; //對尾指針后移 Que->rear = (Que->rear + 1) % QUEUESIZE; //更新隊列長度 Que->count++; return TRUE; } /************************************************* Function: PopCycleQueue Description: 出隊 Input: 隊列指針 CycleQueue *Que Output: Return: 成功返回數據元素,失敗程序退出 Others: *************************************************/ int PopCycleQueue(CycleQueue *Que , ElemType *e) { //判斷隊列是否為空 if(Que->count == 0) { printf("PopCycleQueue fail: The queue is empty!/n"); exit(EXIT_FAILURE); } //保存返回值 *e = Que->data[Que->front]; //更新隊頭指針 Que->front = (Que->front + 1) % QUEUESIZE; //更新隊列長度 Que->count--; return TRUE; } /************************************************* Function: GetCycleHead Description: 取隊頭元素 Input: 隊列指針 CycleQueue *Que Output: Return: 成功返回數據元素,否則程序退出 Others: *************************************************/ int GetCycleHead(CycleQueue *Que, ElemType *e){ //判斷隊列是否為空 if(Que->count == 0) { printf("The queue is empty!"); exit(EXIT_FAILURE); } *e = Que->data[Que->front]; return TRUE;} /************************************************* Function: CycleQueueTraverse Description: 清空隊列 Input: 隊列指針 CycleQueue *Que Output: Return: 成功返回OK Others: *************************************************/ int CycleQueueTraverse(CycleQueue *Que, void (*fp)(ElemType)){ //判斷隊列是否為空 if(Que->count == 0) { printf("CycleQueueTraverse error :The queue is empty!/n"); exit(EXIT_FAILURE); } int x = Que->front; do{ (*fp)(Que ->data[x]); x = (x + 1) % QUEUESIZE; }while(x != Que->rear);}/************************************************* Function: ClearCycleQueue Description: 清空隊列 Input: 隊列指針 CycleQueue *Que Output: Return: 成功返回OK Others: *************************************************/ int ClearCycleQueue(CycleQueue *Que ) { bzero(Que->data,QUEUESIZE); Que->front = Que->rear = 0; Que->count = 0; return OK; } /************************************************* Function: CycleQueueLength Description: 取得隊列的長度 Input: 隊列指針 CycleQueue *Que Output: Return: 返回隊列的長度 Others: *************************************************/ int CycleQueueLength(CycleQueue *Que) { return Que->count; }/************************************************* Function: PrintCycleQueue Description: 打印隊列Input: 隊列指針 CycleQueue *Que Output: Return: Others: *************************************************/int PrintCycleQueue(CycleQueue *Que){ //判斷隊列是否為空 if(Que->count == 0) { printf("PrintCycleQueue error :The queue is empty!/n"); exit(EXIT_FAILURE); } int x = Que->front; printf("PrintCycleQueue:"); do{ printf("%d ",Que->data[x]); x = (x + 1) % QUEUESIZE; }while(x != Que->rear); printf("/n");}int main(int argc , char *argv[]){ CycleQueue ue; InitLinkQueue(&ue); int i = 1; for(i;i<=20;i++) if(0 == PushCycleQueue(&ue,&i))break; PrintCycleQueue(&ue); ElemType w; GetCycleHead(&ue , &w); printf("GetCycleHead:%d/n",w); PopCycleQueue(&ue,&w); PrintCycleQueue(&ue); GetCycleHead(&ue , &w); printf("GetCycleHead:%d/n",w); PushCycleQueue(&ue,&i); ClearCycleQueue(&ue); PrintCycleQueue(&ue);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 封开县| 韩城市| 白银市| 大洼县| 镇江市| 马关县| 习水县| 吴江市| 固原市| 宿州市| 铁岭县| 武强县| 长治市| 扶余县| 韶关市| 临泉县| 德清县| 抚顺市| 石楼县| 凉城县| 始兴县| 深泽县| 雅安市| 宜宾市| 宁蒗| 晋中市| 贵港市| 阳高县| 曲沃县| 土默特右旗| 涪陵区| 东城区| 嵩明县| 北碚区| 五寨县| 新沂市| 余庆县| 中宁县| 晴隆县| 嘉鱼县| 涟源市|