C語言隊列的實現


對於C語言的隊列來說,也有順序存儲和鏈表存儲兩種方式。

順序存儲容量固定,鏈表存儲隨時分配釋放更加靈活。

 

下面是鏈表實現的隊列初始化、入隊、出隊函數實現:

#include<stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
	int val;
	struct Node* next;
}NODE, * PNODE;

typedef struct Queue
{
	PNODE front, rear;
}QUEUE, *PQUEUE;

void InitQueue(PQUEUE queue)
{
	queue->front = queue->rear = (PNODE)malloc(sizeof(NODE));
	if (queue->front == NULL)
	{
		printf("沒有足夠內存空間,錯誤\n");
	}
	queue->front->next = NULL;
}

void InsertQueue(PQUEUE queue, int val)
{
	PNODE tmp = (PNODE)malloc(sizeof(NODE));
	if (tmp == NULL)
	{
		printf("無足夠內存空間,錯誤\n");
	}
	tmp->val = val;
	tmp->next = NULL;
	queue->rear->next = tmp;
	queue->rear = queue->rear->next;
	tmp = NULL;
}

int DeleteQueue(PQUEUE queue)
{
	if (queue->front == queue->rear)
	{
		printf("隊列為空\n");
	}
	PNODE p = NULL;
	int val;
	p = queue->front->next;
	queue->front->next = p->next;
	val = p->val;
	free(p);
	p = NULL;
	return val;

}

int main(void)
{
	QUEUE queue;
	InitQueue(&queue);
	InsertQueue(&queue, 1);
	InsertQueue(&queue, 2);
	InsertQueue(&queue, 3);
	for (int i = 0; i < 3; i++)
		printf("%d\n", DeleteQueue(&queue));

	return 0;
}

  

注意:在定義隊列的時候,不能定義PQUEUE,因為他是一個指針,在定義時需要指向NULL,但是指向NULL的指針是不允許對內部的結點進行任何操作的,因此需要定義QUEUE。

再通過&queue將隊列指針傳遞進去。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM