c語言數據結構學習心得——隊列

隊列數組

只容許在一端進行插入,在另外一端進行刪除的線性表spa

隊頭(Front):容許刪除的一端(隊首)指針

隊尾(Rear):容許插入的一端code

FIFO:先進先出blog

    不要求從數組首位開始存儲隊列隊列

#define MaxSize 50            //定義隊列中元素的最大個數
typedef struct{
    ElemType data[MaxSize];  //存放隊列元素
    int front,rear;          //隊頭指針和隊尾指針
}SqQueue;

循環隊列圖片

其中,首尾相連的順序存儲的隊列叫循環隊列class

入隊:rear=(rear+1)%MaxSize循環

出隊:front=(front+1)%MaxSizeim

隊空:front=rear

隊滿:數組中仍有一個空餘單元

隊滿時:(rear-front+MaxSize)%MaxSize

1.入隊

bool EnQueue(SqQueue &Q,ElemType x){
    if((Q.rear+1)%MaxSize==Q.front) return false;//隊滿
    Q.data[Q.rear]=x;
    Q.rear=(Q.rear+1)%MaxSize;
    return true;
}

2.出隊

bool DeQueue(SqQueue &Q,ElemType &x){
    if(Q.rear==Q.front) return false;//隊滿
    x=Q.data[Q.front];
    Q.rear=(Q.front+1)%MaxSize;
    return true;
}

 

鏈式隊列

typedef struct{  //鏈式隊列結點
    ElemType data;  
    struct Link Node *next;  
}Link Node;

typedef struct{  //鏈式隊列
    ElemType data;  
    Link Node *front,*rear;//隊頭和隊尾指針 }Link Queue;
 

1.入隊

void EnQueue(LinkQueue &Q,ElemType x){
    s=(LinkNode *)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=NULL;
    Q.rear->next=s;
    Q.rear=s;
}

2.出隊

bool DeQueue(LinkQueue &Q,ElemType &x){
   if(Q.front==Q.rear) return false;   //空隊
   p=Q.front->next;
   x=p->data;
   Q.front->next=p->next;
   if(Q.rear==p) Q.rear=Q.front;       //原隊列只有一個結點刪後變空隊
   free(p);
   return true;
}

 

雙端隊列

具體見上傳圖片

 

總結

相關文章
相關標籤/搜索