隊列的鏈式表示叫作鏈隊列
和棧的鏈式存儲一樣,都是單鏈表的閹割版
以下實現的是帶頭結點的鏈隊列
(成員變量有結構體的結構體在訪問成員時用->,其餘用.)
//隊列的鏈式表示叫作鏈隊列
//和棧的鏈式存儲一樣,都是單鏈表的閹割版
//以下實現的是帶頭結點的鏈隊列
//(成員變量有結構體的結構體在訪問成員時用->,其餘用.)
//Elemtype:int
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode{//鏈式隊列節點
int data;//數據域
struct LinkNode* next;//指針域
}LinkNode;
typedef struct{//鏈式隊列
LinkNode *front,*rear;//頭尾指針
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.front=(LinkNode*)malloc(sizeof(LinkNode));//分配一個頭結點,頭指針指向頭結點
Q.front->next=NULL;
Q.rear = Q.front;//尾指針初始也指向頭結點
}
//other functions
bool IsEmpty(LinkQueue Q){//判空
if(Q.front==Q.rear)return true;
else return false;
}
//important functions
void EnQueue(LinkQueue &Q,int x){//入隊操作
LinkNode* s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
bool DeQueue(LinkQueue &Q,int &x){//出隊操作
if(Q.front==Q.rear)return false;
LinkNode* p=Q.front->next;//p指向第一個數據元素
x=p->data;
Q.front->next=p->next;
if(p->next==NULL){//如果刪除的節點爲最後一個節點,將rear指向頭結點
Q.rear=Q.front;
}
free(p);//釋放被刪除的節點,p函數結束後系統會自動回收
return true;
}
int main(){
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
EnQueue(Q,4);
int x;
DeQueue(Q,x);
printf("%d",x);
return 0;
}