《数据结构》 队列(Queue)操作代码集合
时间:2022-04-26
本文章向大家介绍《数据结构》 队列(Queue)操作代码集合,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
队列基本操作代码集合,来自《数据结构-用C语言描述》(第二版) 高教社 队列是受限制的链表或顺序表(只能从队首取结点,先进先出FIFO),相关操作可以查看之前的博客。
/*链队列*/
typedef struct {
QueueElemType data;
struct Node *next;
} LinkQueueNode;
typedef struct {
LinkQueueNode *front;
LinkQueueNode *rear;
} LinkQueue;
/*初始化*/
int InitQueue(LinkQueue *Q) {
Q->front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(Q->front != NULL) {
Q->rear = Q->front;
Q->front->next = NULL;
return(TRUE);
}
else {
return(FALSE);
}
}
/*链队入队*/
int EnterQueue(LinkQueue *Q, QueueElemType x) {
LinkQueueNode *NewNode;
NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(NewNode != NULL) {
NewNode->data = x;
NewNode->next = NULL;
Q->rear->next = NewNode;
Q->rear = NewNode;
}
else {
printf("OVERFLOW:n");
return(FALSE);
}
}
/*链队出队*/
int DeleteQueue(LinkQueue *Q, QueueElemType *x) {
LinkQueueNode *p;
if(Q->front == Q->rear) {
return(FALSE);
}
p = Q->front->next;
Q->front->next = p->next;
if(Q->rear == p) {
Q->rear = Q->front;
}
*x = p->data;
free(p);
return(TRUE);
}
/*循环队列*/
#define MAXSIZE 50
typedef struct {
QueueElemType elem[MAXSIZE];
int front;
int rear;
} SeqQueue;
void InitQueue(SeqQueue *Q) {
Q->front = Q->rear = 0;
}
/*循环队列入队操作*/
int EnterQueue(SeqQueue *Q, QueueElemType x) {
if((Q->rear + 1) % MAXSIZE == Q->front) {
printf("OVERFLOW");
return FALSE;
}
*x = Q->elem[Q->front];
Q->front = (Q->front+1) % MAXSIZE;
}
/*循环队列出队操作*/
int DeleteQueue(SeqQueue *Q, QueueElemType *x) {
if(Q->front == Q->rear) {
return(FALSE);
}
*x = Q->elem[Q->front];
Q->front = (Q->front - 1) % MAXSIZE;
return(TRUE);
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- KVM管理虚拟机
- fpga实现YCbCr444转RGB
- UML类图自动生成,太爽了
- Python爬虫之mongodb介绍和安装
- 一句话说清楚 CountDownLatch 和 CyclicBarrier 的区别
- Android 功耗(8)---如何找到阻止进入deep idle SODI的元凶
- 【技术创作101训练营】三种不同场景下 vue 组件动态加载的方法及实现
- leetcode链表之回文链表
- 如何理解 Go 中的反射
- Synchronized深入分析
- Spring的一些零碎知识点整理
- CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统
- 建议收藏 哭着喊着 从C语言转向C++刷算法
- Spring的事务管理
- 面向切面的Spring