操作受限的線性表:鏈隊列

隊列的鏈式表示叫作鏈隊列
和棧的鏈式存儲一樣,都是單鏈表的閹割版
以下實現的是帶頭結點的鏈隊列 
(成員變量有結構體的結構體在訪問成員時用->,其餘用.)

//隊列的鏈式表示叫作鏈隊列
//和棧的鏈式存儲一樣,都是單鏈表的閹割版
//以下實現的是帶頭結點的鏈隊列 
//(成員變量有結構體的結構體在訪問成員時用->,其餘用.)
//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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章