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 栈和队列 - 链队列的主要内容,如果未能解决你的问题,请参考以下文章