程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 隊列之出隊入隊

隊列之出隊入隊

編輯:C++入門知識

[cpp] 
 線性結構的倆種常見應用之二——隊列                                                                   
 定義: 
   一種實現“先進先出”的存儲結構 
分類: 
鏈式隊列 
 
靜態隊列 
靜態隊列通常都必須是循環隊列                          判斷隊列是否已滿: 
隊列需要倆個參數即front 頭和rear尾                         if((rear+1)%數組長度)==f) 
入隊:rear=(rear+1)%數組長度                                    已滿 
出隊:front=(front+1)%數組長度                             else     
                                                                未滿 
 
#include<stdio.h> 
#include<malloc.h> 
#include<stdlib.h> 
//隊列一定是循環的 
typedef struct Queue{ 
    int *pBase; 
    int front; 
    int rear; 
}QUEUE; 
 
void init(QUEUE *);//隊列的初始化 
bool en_queue(QUEUE *,int val);//入隊pQ->rear=(pQ->rear+1)%6; 
void traverse_queue(QUEUE*);//遍歷輸出 
bool full_queue(QUEUE*);//判斷是否為滿pQ->rear+1)%6==pQ->front 
bool out_queue(QUEUE *,int*);//出隊 pQ->front=(pQ->front+1)%6; 
bool emput_queue(QUEUE *);//判斷是否為空pQ->front==pQ->rear 
 
int main(void) 

    int val,val1; 
    QUEUE Q; 
    init(&Q);  //通過取地址將實參傳入形參 
    printf("入隊的元素以0結束\n"); 
    while(val1!=0)                       //通過while循環入隊 
    { 
      printf("請輸入入隊的元素:"); 
      scanf("%d",&val1); 
      en_queue(&Q,val1); 
    } 
 
    traverse_queue(&Q); 
    printf("\n"); 
    while(out_queue(&Q,&val))     //用while進行出隊 
    { 
      printf("出隊的元素是:%d\n",val); 
    } 
    /*if(out_queue(&Q,&val))
    {
       printf("出隊成功!出隊的元素是 %d",val);
    }
    else{
    printf("出隊失敗!");
    }*/ 
    return 0; 
 

void init(QUEUE *pQ)    //隊列的初始化 

   pQ->pBase=(int*)malloc(sizeof(int)*6);//申請隊列的長度為6由於隊列是循環隊列所以只能 
   //存5個值,即始終是頭尾只有一個存值 
   pQ->front=0; 
   pQ->rear=0; 

 
bool full_queue(QUEUE *pQ) 

    if((pQ->rear+1)%6==pQ->front)        //判斷隊滿的標志 
    { 
        return true; 
    } 
    else 
    { 
        return false; 
    } 

 
bool en_queue(QUEUE *pQ,int val) 

    if(full_queue(pQ)) 
    { 
        return false; 
    } 
    else{ 
     pQ->pBase[pQ->rear]=val;//入隊,將val值添加在尾的後面 
     pQ->rear=(pQ->rear+1)%6; 
     return true; 
    } 

void traverse_queue(QUEUE *pQ) 

    int i=pQ->front;      //從頭開始 
    while(i!=pQ->rear)  //直到尾 
    { 
        printf("%d ",pQ->pBase[i]); 
        i=(i+1)%6;   //實際上等同於i++ 
    } 
    return; 

bool emput_queue(QUEUE *pQ) 

    if(pQ->front==pQ->rear)    //為空的標志 
    return true; 
    else 
    return false; 
}  www.2cto.com
bool out_queue(QUEUE *pQ,int *pVal)//出隊,將出隊的值保存在PVal中 

    if(emput_queue(pQ)) 
    { 
       return false; 
    } 
    else 
    { 
      *pVal=pQ->pBase[pQ->front];//出隊,從頭開始出隊將出隊的值保存在PVal中 
      pQ->front=(pQ->front+1)%6; 
    } 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved