【数据结构】-链队列(带头结点)

1.头文件及类型定义

#include<stdio.h>
#include<stdlib.h>
#define ElemType int

2.链队列类型定义

typedef struct LinkNode {
   		//链式队列的结点类型定义
	ElemType data;				//每个结点存放一个数据元素
	struct LinkNode* next;		//指向下一个结点的指针
}LinkNode;

typedef struct {
   				//联式队列定义
	LinkNode* front, * rear;	//队列的队头指针和队尾指针 
}LinkQueue;

3.函数声明

/*函数声明*/
void InitQueue(LinkQueue& Q);				//1.初始化队列
bool LiQueueEmpty(LinkQueue Q);				//2.判空
bool EnQueue(LinkQueue& Q, ElemType x);		//3.入队操作
bool ExQueue(LinkQueue& Q, ElemType& x);	//4.出队操作
bool GetHead(LinkQueue Q, ElemType& x);		//5.获取队头元素

4.基本操作

4.1 初始化队列

//1.初始化队列(带头结点) 
void InitQueue(LinkQueue& Q) {
   
	Q.front = Q.rear = (LinkNode*)malloc
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
带头结点的链队列是一种使用链表实现的队列结构,每个节点包含一个数据元素和一个指向下一个节点的指针。头结点不存储数据,只用于方便操作。 基本操作包括: 1. 初始化队列:创建一个头结点,并将队头指针和队尾指针指向头结点。 2. 判断队列是否为空:判断队头指针和队尾指针是否相等,如果相等则队列为空。 3. 入队操作:创建一个新节点,并将数据元素存入节点中,将队尾指针指向新节点。 4. 出队操作:将队头指针指向头结点的下一个节点,返回队头节点的数据元素。 5. 取队头元素:返回队头节点的数据元素,但不改变队列状态。 以下是带头结点的链队列的基本操作的代码实现: ```c++ #include <iostream> using namespace std; // 定义链队列结点结构体 struct Node { int data; Node *next; }; // 定义带头结点的链队列结构体 struct Queue { Node *front; // 队头指针 Node *rear; // 队尾指针 }; // 初始化队列 void initQueue(Queue &q) { q.front = q.rear = new Node; q.front->next = nullptr; } // 判断队列是否为空 bool isEmpty(Queue q) { return q.front == q.rear; } // 入队操作 void enQueue(Queue &q, int x) { Node *newNode = new Node; newNode->data = x; newNode->next = nullptr; q.rear->next = newNode; q.rear = newNode; } // 出队操作 int deQueue(Queue &q) { if (isEmpty(q)) { cout << "Queue is empty!" << endl; return -1; } Node *p = q.front->next; int x = p->data; q.front->next = p->next; if (q.rear == p) { q.rear = q.front; } delete p; return x; } // 取队头元素 int getFront(Queue q) { if (isEmpty(q)) { cout << "Queue is empty!" << endl; return -1; } return q.front->next->data; } int main() { Queue q; initQueue(q); cout << "Is queue empty? " << isEmpty(q) << endl; enQueue(q, 1); enQueue(q, 2); enQueue(q, 3); cout << "Front element: " << getFront(q) << endl; cout << "Dequeue element: " << deQueue(q) << endl; cout << "Front element: " << getFront(q) << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值