詳解數據構造C說話完成之輪回隊列。本站提示廣大學習愛好者:(詳解數據構造C說話完成之輪回隊列)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解數據構造C說話完成之輪回隊列正文
本文講的是輪回隊列,起首我們必需明確上面幾個成績
輪回隊列的基本常識
1.輪回隊列須要幾個參數來肯定
輪回隊列須要2個參數,front和rear
2.輪回隊列各個參數的寄義
(1)隊列初始化時,front和rear值都為零;
(2)當隊列不為空時,front指向隊列的第一個元素,rear指向隊列最初一個元素的下一個地位;
(3)當隊列為空時,front與rear的值相等,但紛歧定為零;
3.輪回隊列入隊的偽算法
(1)把值存在rear地點的地位;
(2)rear=(rear+1)%maxsize ,個中maxsize代表數組的長度;
法式代碼:
bool Enqueue(PQUEUE Q, int val)
{
if(FullQueue(Q))
return false;
else
{
Q->pBase[Q->rear]=val;
Q->rear=(Q->rear+1)%Q->maxsize;
return true;
}
}
4.輪回隊列出隊的偽算法
(1)先保留出隊的值;
(2)front=(front+1)%maxsize ,個中maxsize代表數組的長度;
法式代碼:
bool Dequeue(PQUEUE Q, int *val)
{
if(EmptyQueue(Q))
{
return false;
}
else
{
*val=Q->pBase[Q->front];
Q->front=(Q->front+1)%Q->maxsize;
return true;
}
}
5.若何斷定輪回隊列能否為空
if(front==rear)
隊列空;
else
隊列不空;
bool EmptyQueue(PQUEUE Q)
{
if(Q->front==Q->rear) //斷定能否為空
return true;
else
return false;
}
6.若何斷定輪回隊列能否為滿
這個成績比擬龐雜,假定數組的存數空間為7,此時曾經寄存1,a,5,7,22,90六個元素了,假如在往數組中添加一個元素,則rear=front;此時,隊列滿與隊列空的斷定前提front=rear雷同,如許的話我們就不克不及斷定隊列究竟是空照樣滿了;
處理這個成績有兩個方法:
一是增長一個參數,用來記載數組中以後元素的個數;
第二個方法是,罕用一個存儲空間,也就是數組的最初一個存數空間不消,當(rear+1)%maxsiz=front時,隊列滿;
bool FullQueue(PQUEUE Q)
{
if(Q->front==(Q->rear+1)%Q->maxsize) //斷定輪回鏈表能否滿,留一個預留空間不消
return true;
else
return false;
}
附錄:
queue.h文件代碼:
#ifndef __QUEUE_H_
#define __QUEUE_H_
typedef struct queue
{
int *pBase;
int front; //指向隊列第一個元素
int rear; //指向隊列最初一個元素的下一個元素
int maxsize; //輪回隊列的最年夜存儲空間
}QUEUE,*PQUEUE;
void CreateQueue(PQUEUE Q,int maxsize);
void TraverseQueue(PQUEUE Q);
bool FullQueue(PQUEUE Q);
bool EmptyQueue(PQUEUE Q);
bool Enqueue(PQUEUE Q, int val);
bool Dequeue(PQUEUE Q, int *val);
#endif
queue.c文件代碼:
#include<stdio.h>
#include<stdlib.h>
#include"malloc.h"
#include"queue.h"
/***********************************************
Function: Create a empty stack;
************************************************/
void CreateQueue(PQUEUE Q,int maxsize)
{
Q->pBase=(int *)malloc(sizeof(int)*maxsize);
if(NULL==Q->pBase)
{
printf("Memory allocation failure");
exit(-1); //加入法式
}
Q->front=0; //初始化參數
Q->rear=0;
Q->maxsize=maxsize;
}
/***********************************************
Function: Print the stack element;
************************************************/
void TraverseQueue(PQUEUE Q)
{
int i=Q->front;
printf("隊中的元素是:\n");
while(i%Q->maxsize!=Q->rear)
{
printf("%d ",Q->pBase[i]);
i++;
}
printf("\n");
}
bool FullQueue(PQUEUE Q)
{
if(Q->front==(Q->rear+1)%Q->maxsize) //斷定輪回鏈表能否滿,留一個預留空間不消
return true;
else
return false;
}
bool EmptyQueue(PQUEUE Q)
{
if(Q->front==Q->rear) //斷定能否為空
return true;
else
return false;
}
bool Enqueue(PQUEUE Q, int val)
{
if(FullQueue(Q))
return false;
else
{
Q->pBase[Q->rear]=val;
Q->rear=(Q->rear+1)%Q->maxsize;
return true;
}
}
bool Dequeue(PQUEUE Q, int *val)
{
if(EmptyQueue(Q))
{
return false;
}
else
{
*val=Q->pBase[Q->front];
Q->front=(Q->front+1)%Q->maxsize;
return true;
}
}
以上就是C說話完成輪回隊列的全體內容,關於進修數據構造與算法的研討有所贊助,有須要的同伙可以參考下。