隊列數組
只容許在一端進行插入,在另外一端進行刪除的線性表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; }
雙端隊列
具體見上傳圖片
總結