#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} LinkNode;
typedef struct {
LinkNode *front, *rear;
} LinkQueue;
// 带头结点
int InitQueue(LinkQueue *q) {
q->front = q->rear = (LinkNode *)malloc(sizeof(LinkNode));
if (q->front == NULL) return -1;
q->front->next = NULL;
return 1;
}
// 带头结点
int EnQueue(LinkQueue *q, int e) {
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
if (s == NULL) return -1;
q->rear->next = s;
q->rear = s;
s->next = NULL;
s->data = e;
return 1;
}
// 带头结点
int DeQueue(LinkQueue *q, int *e) {
if (q->front == q->rear) return -1;
LinkNode *p = q->front->next;
*e = p->data;
q->front->next = p->next;
if (q->rear == p) {
q->rear = q->front;
}
free(p);
return 1;
}
// 不带头结点
int InitQueue1(LinkQueue *q) {
q->front = q->rear = NULL;
return 1;
}
// 不带头结点
int EnQueue1(LinkQueue *q, int e) {
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
if (s == NULL) return -1;
s->next = NULL;
s->data = e;
if (q->front == NULL) {
q->front = s;
q->rear = s;
} else {
q->rear->next = s;
q->rear = s;
}
return 1;
}
// 不带头结点
int DeQueue1(LinkQueue *q, int *e) {
if (q->front == NULL) return -1;
LinkNode *p = q->front;
q->front = p->next;
*e = p->data;
if (q->rear == p) {
q->front = NULL;
q->rear = NULL;
}
free(p);
return 1;
}
// 带头结点
int Empty(LinkQueue q) {
if (q.front == q.rear) return 1;
else return -1;
}
// 不带头结点
int Emptyq(LinkQueue q) {
if (q.front == NULL) return 1;
else return -1;
}
int main() {
LinkQueue q;
InitQueue(&q);
return 0;
}
链式队列
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- Java实现队列——顺序队列、链式队列 概念 先进者先出,这就是典型的“队列”。(First In, First ...
- 一.简介 在哔哩哔哩看视频学的,赫斌老师数据结构入门的内容-b站搜索:av6159200(P47),通过学习循环队...