數據結構3.1——隊列

隊列

隊列(queue)是一種先進先出的線性表。它只允許在表的一端進行插入,而在另一端進行刪除。允許插入的一端叫做隊尾(rear),允許刪除的一端則稱爲對頭(front)。隊列的基本操作有入隊(enqueue),即在表的尾端插入一個元素,出隊(dequeue)它是刪除在表的開頭的元素。




同棧相同隊列也有兩種存儲方法:一種使用數組,另一種是使用單鏈表。

1.隊列的順序表示

typedef struct queue
{
	int data[MAXSIZE];
	int front;
	int rear;
}queue;


2.隊列的鏈式存儲結構

鏈隊列需要兩個指針分別指向隊頭和隊尾,並且使頭指針指向頭結點,空的鏈隊列的判斷條件爲頭指針和尾指針均指向頭結點。
其代碼表示爲
<span style="font-size:12px;">typedef struct QNode 
{
	int data;
	struct QNode *next;
}QNode,*Queue;

typedef struct linkQueue
{
	Queue front;
	Queue rear;
}LinkQueueNode,*LinkQueue;</span><span style="font-size: 18px;">
</span>



鏈隊列的入隊和出隊即爲單鏈表的插入和刪除操作。


void enQueue(LinkQueue queue,int e)
{
	Queue p;
	p = (Queue)malloc(sizeof(QNode));
	p->data = e;
	if(!p)
		printf("full queue");
	else
	{
		p->next =NULL;
		queue->rear->next=p;
		queue->rear=p;
	}
	return ;
}

void deQueue(LinkQueue queue,int *e)
{
	if(queue->front==queue->rear)
		return ;
	Queue q;
	q=queue->front->next;
	*e=q->data;
	queue->front->next=q->next;
	if(queue->rear==q)
		queue->rear=queue->front;
	free(q);
	return ;
}

3.循環隊列



循環隊列的數組表示爲
# define MAXSIZE 100
typedef struct queue
{
	int *base;
	int front;
	int rear;
}queue,*cirQueue;
其進隊出隊操作爲:
void enQueue(cirQueue q,int e)
{
	if(((q->rear+1) % MAXSIZE)==q->front)
		return;
		q->base[q->rear]=e;
	q->rear=(q->rear+1)%MAXSIZE;
	return ;
}

void deQueue(cirQueue q,int *e)
{
	if(q->front==q->rear)
		return;
	*e = q->base[q->front];
	q->front=(q->front+1)%MAXSIZE;
	return ;
}









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