溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

靜態(tài)循環(huán)隊列c程序演示

發(fā)布時間:2020-08-03 00:13:34 來源:網(wǎng)絡(luò) 閱讀:313 作者:dlb15736130376 欄目:編程語言
/*
1、隊列:一端進(jìn),另一端出;隊列由兩個參數(shù)決定,front(頭),rear(尾);
	頭指針指向頭一個元素,尾指針指向指向最后一個元素的下一存儲單元;若數(shù)組長度為n,當(dāng)元素個數(shù)為n-1時就認(rèn)為隊列已滿。r指向最后一個空的元素空間。

	出隊:頭指針往上移動,

	入隊:尾指針向上移動,故:靜態(tài)隊列只能是循環(huán)隊列,不然出隊的元素占用的空間
	永遠(yuǎn)無法重復(fù)利用。
	
	1):隊列的初始化:front,rear的值都是零、
	2):隊列非空:front代表的是隊列的第一個元素,rear代表的是隊列的最后一個元素的下個存儲單元
	3) :隊列空:front和rear的值相等,但不一定是零
	4):動態(tài)隊列:鏈表實現(xiàn)
	     靜態(tài)隊列:數(shù)組實現(xiàn)

2、循環(huán)隊列:
	出隊:f = (f+1) % 數(shù)組長度
	入隊:r = (r+1) % 數(shù)組長度	
	
	+++++++++++++++++++++
	+		    +
	+		    +<----r
	+		    +
	+++++++++++++++++++++
	+		    +
	+	c	    +
	+		    +
	+++++++++++++++++++++
	+		    +
	+	b	    +
	+		    +
	+++++++++++++++++++++
	+		    +
  f --->+	a	    +
	+		    +
	+++++++++++++++++++++
	
	如何判斷循環(huán)隊列是否為空: 如果f == r 就一定為空
	如何判斷隊列已滿:
		1)增加一個標(biāo)志n記錄隊列元素的個數(shù),當(dāng)n = 數(shù)組長度-1時,就滿了。
		2)if((r+1)%arr.length == f){
			隊列已滿
		}
		通常使用第二種

隊列的具體應(yīng)用:
	所有和時間有關(guān)的操作都有隊列的影子。
*/

#include<stdio.h>
#include<malloc.h>
//靜態(tài)循環(huán)隊列(數(shù)組實現(xiàn))程序演示 
typedef struct Queue
{      int length;
       int *pBase;
       int front;
       int rear;       
}QUEUE,* PQUEUE;
//初始化隊列 
void init(PQUEUE pQ,int length);
//判斷隊列是否已滿 
bool is_full(PQUEUE pQ);
//判斷隊列是否為空 
bool is_empty(PQUEUE pQ);
//遍歷
void traverse(PQUEUE pQ); 
//入隊  r = (r+1) % 數(shù)組長度
bool en_queue(PQUEUE pQ,int val);
//出隊 f = (f+1) % 數(shù)組長度
bool de_queue(PQUEUE pQ,int * val); 
int main(void)
{
    QUEUE q;
    init(&q,6);
    en_queue(&q,1);
    en_queue(&q,2);
    en_queue(&q,3);
    en_queue(&q,4);
    en_queue(&q,5);
    traverse(&q); 
    int a = 0;
    de_queue(&q,&a);
    printf("出隊的元素是:%d\n",a); 
    traverse(&q); 
    getchar();
    return 0;    
}
//初始化隊列 
void init(PQUEUE pQ,int length)
{    //分配內(nèi)存 
     pQ->pBase =(int *) malloc(sizeof(int) * length); 
     pQ->length = length;
     pQ->front = 0; 
     pQ->rear = 0; //下標(biāo)的都是0  
}
//判斷隊列是否已滿 
bool is_full(PQUEUE pQ)
{
     if((pQ->rear + 1) % (pQ->length) == pQ->front)
     {
         return true;
     } 
     else
     {
         return false;    
     }
}
//判斷隊列是否為空 
bool is_empty(PQUEUE pQ)
{
     if(pQ->front == pQ->rear)
     {
           return true;                    
     }else
     {
          return false;     
     }    
} 
//入隊 
bool en_queue(PQUEUE pQ,int val)
{
       if(is_full(pQ))
       {
                  printf("隊列已滿\n");
                  return false; 
       }  
       pQ->pBase[pQ->rear] = val;
       //入隊,尾角標(biāo)增加 
       pQ->rear = (pQ->rear+1)%(pQ->length);
       return true; 
}
//出隊 
bool de_queue(PQUEUE pQ,int * val)
{   
     if(is_empty(pQ)){
                      printf("隊列已空");
                      return false;       
     } 
    *val = pQ->pBase[pQ->front];
    pQ->front =  (pQ->front + 1) % (pQ->length);
    return true;  
}
//遍歷 
void traverse(PQUEUE pQ)
{    
     int i = pQ->front;
     while(i !=pQ->rear)
     {
          printf("%d\t",pQ->pBase[i]);
         i = (i + 1) % (pQ->length);
     }     
}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI