C Language 栈和队列 - 链队列

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C Language 栈和队列 - 链队列相关的知识,希望对你有一定的参考价值。

链队列与单链表不同的是,我们设置头指针和尾指针指向链队的头结点和尾结点,方便链队操作。

  • 创建结构体:
typedef struct Qnode {
	char data;
	struct Qnode *next;
} Qnode;

typedef struct {
	Qnode *front;
	Qnode *rear;
}LinkQuNode;

  • 初始化队列算法:
//初始化队列
void initQueue(LinkQuNode *&lq) {
	lq = (LinkQuNode *)malloc(sizeof(LinkQuNode));
	lq->front = lq->rear = NULL;
}
  • 入队算法如下:
//链队进队操作
void enQue(LinkQuNode *&lq) {

	Qnode *p;

	char ch[ChSize] = {'a','b','c','d','e','f'};
	int size = ChSize - 1;
	while(size >= 0) {
		p = (Qnode *)malloc(sizeof(Qnode));
		p->data = ch[size--];
		p->next = NULL;
		if(lq->rear == NULL) {
			lq->front = lq->rear = p; //头指针和尾指针指向第一个元素
		} else {
			lq->rear->next = p; //移动尾指针入队
			lq->rear = p; //将尾指针指向新入队结点
		}
	}
}
  • 销毁队列算法:
//销毁队列
void destoryQueue(LinkQuNode *&lq) {

	Qnode *pre = lq->front , *p;

	if(pre!=NULL) {
		p = pre->next;
		while(p!=NULL) {
			free(pre);
			pre = p;
			p=p->next;
		}
		free(pre);
	}
	free(lq);
}
  • 链队出队算法:
//链队出队
void deQue(LinkQuNode *&lq){
	Qnode *p;
	
	if(lq->rear == NULL){
		exit(1);
	}

	while(lq->front != NULL){
		printf("%3c",lq->front->data);
		p = lq->front;
		lq->front = lq->front->next;
		free(p);
	}
	lq->front = lq->rear = NULL;
} 
  • 最终结果展示:

以上是关于C Language 栈和队列 - 链队列的主要内容,如果未能解决你的问题,请参考以下文章

C Language 栈和队列 - 顺序栈

C Language 栈和队列 - 链栈

线性表 链队列

栈和队列-上

[DataStructure]线性数据结构之稀疏数组链表栈和队列 Java 代码实现

[DataStructure]线性数据结构之稀疏数组链表栈和队列 Java 代码实现