1. 程式人生 > 其它 >資料結構_佇列

資料結構_佇列

佇列: 一個有先進先出特點的線性表。
佇列的基本操作:
(1)佇列的初始化(InitQueue(q))
初始化一個空隊。
(2)入隊操作(InQueue(q,x))
對已存在的佇列q,插入一個元素x至隊尾,成功,返回true,失敗,返回false。
(3)出隊操作(OutQueue(q,x))
刪除隊首元素,並返回其值,成功返回true,否則返回false。
(4)讀隊頭元素(FrontQueue(q,x))
讀隊頭元素,並返回其值,隊不變,成功返回true,否則返回false。
(5)判隊空操作(EmptyQueue(q))
若佇列為空,則返回1,否則返回0 。
迴圈佇列資料結構定義:

typedef
struct{ QueueElementType element[maxsize]; int front; int rear; }SeqQueue; SeqQueue *q;

迴圈佇列初始化:

void InitQueue(SeqQueue Q){
	Q->front=Q->rear=maxsize-1;
}

入隊操作:

int InQueue(SeqQueue *Q,QueueElementType x){
	if((Q->rear+1)&maxsize==q->front)
		return (false);
	Q->rear=(Q->
rear+1)%maxsize; Q->element[Q->rear]=x; return(true); }

出隊操作:

DeleteQueue(SeqQueue *Q,QueueElementType x)
{
	if(Q->front==Q->rear)
	return(false);
	Q->front=(Q->front+1)%maxsize;
	*x=Q->element[Q->front];
	return(true); 
}

如何判斷佇列空還是滿
1.少用一個儲存單元;
2.設定標誌位;
3.設定一個計數器。
鏈佇列資料結構定義:

typedef struct Node{
	QueueElementType data;
	struct Node *next;
}LinkQueueNode;
typedef struct{
	LinkQueueNode *front;
	LinkQueueNode *rear;
}LinkQueue;
LinkQueue *Q;

鏈佇列初始化:

int InitQueue(LinkQueue *Q){
	Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
	if(Q->front!=NULL){
		Q->rear=Q->front;
		Q->front->next=NULL;
		return(true);
	}
	else
		return(false);
}

鏈佇列入隊操作:

int EnterQueue(LinkQueue *Q,QueueElementType x){
	LinkQueueNode *newNode;
	newNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
	if(newNode!=NULL){
		newNode->data=x;
		newNode->next=NULL;
		Q->rear->next=newNode;
		Q->rear=newNode;
		return(true);
	}
	else
		return(false);
}

鏈隊列出隊操作:

int DeleteQueue(LinkQueue *Q,QueueElementType x){
	LinkQueueNode *p;
	if(Q->front==Q->rear)
		return(false);
	else{
		p=Q->front->next;
		Q->front->next=p->next;
		*x=p->data;
		free(p);
		return(true);
		}
}