链式队列存储结构
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
// 链式结点
typedef struct LinkNode {
ElemType data;
struct LinkNode* next;
}LinkNode;
// 链式队列
typedef struct {
LinkNode* front, * rear; // 链表头 链表尾
}LinkQueue;
队列初始化 InitQueue(LinkQueue& Q)
// 队列初始化
void InitQueue(LinkQueue& Q) {
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL; //头结点 的next指针为null
}
判空 isempty(LinkQueue Q)
// 判空
bool isempty(LinkQueue Q) {
if (Q.front == Q.rear) return true;
else return false;
}
入队操作 EnQueue(LinkQueue& Q, ElemType x)
// 入队
bool EnQueue(LinkQueue& Q, ElemType x) {
if (x == 9999) return false;
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
return true;
}
出队操作 DeQueue(LinkQueue& Q, ElemType& x)
// 出队
bool DeQueue(LinkQueue& Q, ElemType& x) {
if (Q.front == Q.rear) return false; //队列为空
LinkNode* p = Q.front->next; //Q.front->next为第一个结点
x = p->data;
Q.front->next = p->next;
if (Q.rear == p) Q.rear = Q.front; // 删除的是最后一个元素
free(p);
return true;
}
打印队列元素 printQueue(LinkQueue Q)
void printQueue(LinkQueue Q) {
printf("此时队列元素为:");
LinkNode* p = Q.front->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
测试代码
int main() {
LinkQueue Q;
ElemType element=1;//存储出队元素
bool ret;
InitQueue(Q); // 初始化循环队列
printf("正在创建链式队列,请输入队列元素,以9999结束:");
while (element!=9999)
{
scanf_s("%d", &element);
EnQueue(Q, element);
}
printf("队列建立成功\n\n");
printQueue(Q);
ret = DeQueue(Q, element);
if (ret) printf("出队元素为:%d\n", element);
printQueue(Q);
}
测试截图