C语言实现队列(先进先出)
//队列的链表式实现
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h> //现算表达式,如果为假,向stderr打印出错信息并通过abort终止程序typedef int QDateType; //定义别名typedef struct QueueNode//结构体,队列中的元素:值和指向下个元素的指针
{QDateType val;struct QueueNode* next;
}QueueNode;typedef struct Queue //队列
{QueueNode* head; //头指针QueueNode* tail; //尾指针
}Queue;
//队列初始化
void QueueInti(Queue* pq)
{assert(pq); //非空pq->head = pq->tail = NULL;
}
//队列销毁
void QueueDestory(Queue* pq)
{assert(pq);QueueNode* cur = pq->head;while (cur){QueueNode* next = cur->next;free(cur);cur = next;}pq->tail = pq->head = NULL;
}
//队尾插入元素
void QueuePush(Queue* pq, QDateType x)
{assert(pq);QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));if (NULL == newNode){printf("malloc error\n");exit(-1);}newNode->val = x;newNode->next = NULL;if (pq->tail == NULL){assert(pq->head == NULL);pq->head = pq->tail = newNode;}else{pq->tail->next = newNode;pq->tail = newNode;}}
//队首删除元素
void QueuePop(Queue* pq)
{assert(pq);assert(pq->head && pq->tail);if (pq->head->next == NULL){free(pq->head);pq->head = pq->tail = NULL;}else{QueueNode* next = pq->head->next;free(pq->head);pq->head = next;}
}
//队列是否为空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->head == NULL;
}
//取出队首元素-不删除
QDateType QueueFront(Queue* pq)
{assert(pq);assert(pq->head);return pq->head->val;
}
//取出队尾元素-不删除
QDateType QueueBack(Queue* pq)
{assert(pq);assert(pq->tail);return pq->tail->val;
}
//队列中元素数目
int QueueSize(Queue* pq)
{assert(pq);QueueNode* cur = pq->head;int count = 0;while (cur){cur = cur->next;count++;}return count;
}int main()
{Queue q;QueueInti(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);QueuePush(&q, 5);QueuePush(&q, 6);int n1 = QueueSize(&q);printf("初试元素数目:%d\n", n1); //6//弹出并删除队首的3个元素:1 2 3,剩下4 5 6QueuePop(&q);QueuePop(&q);QueuePop(&q);int n2 = QueueSize(&q);printf("当前元素数目:%d\n", n2); //3printf("当前队首元素%d\n", QueueFront(&q)); //4printf("当前队尾元素%d\n", QueueBack(&q)); //6system("pause");return 0;
}
C语言实现队列(先进先出)相关推荐
- 02 C语言使用队列实现缓存模块QueueBuffer
02 C语言使用队列实现缓存模块QueueBuffer 作者 将狼才鲸 创建日期 2023-03-08 Gitee源码仓库地址:C语言使用队列实现缓存模块QueueBuffer 运行结果: jim@D ...
- c语言建立队列(顺序队列、循化队列和链式队列)
c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...
- C语言实现队列ADT(Queue ADT)接口COMP2521(附完整源码)
C语言实现队列ADT接口COMP2521 QueueRep结构体定义 node结构体定义 实现以下5个接口 完整头文件 完整源文件 QueueRep结构体定义 typedef struct Queue ...
- G - 水陆距离 HihoCoder - 1478(广搜+队列先进先出性质)
题目: 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. Input 第一行包含两个整数,N ...
- java链式结构_java语言实现队列顺序结构与链式结构
本文主要向大家介绍了java语言实现队列顺序结构与链式结构,通过具体的内容向大家展示,希望对大家学习java语言有所帮助. 队列的顺序存储结构实现 public class Queue{ privat ...
- C语言循环队列的基本操作(init,enquene,dequene)与杨辉三角(C和C++<queue>)
C语言循环队列的基本操作与杨辉三角(C和C++的表示方法) C语言的表示方法 #include <stdio.h> #include <malloc.h> #define ma ...
- java先进先出 循环队列_java队列--先进先出(循环队列、链队列)
队列:只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头). 队列的特征就是: 先进先出. 队列的思想及实现也同样非常简单.在生活中的各种常常都需要排队进行,键盘中缓存区.操作系统中的作业调 ...
- c语言编程队列题,数据结构C语言编程 队列.doc
数据结构C语言编程 队列 #include #include #define MAXQSIZE 10 typedef struct { int *base; //存储空间的起始地址,即数组的首地址,即 ...
- C语言实现一个先进先出的队列
代码来源silicon labs的sdk. 一 源码 app_queue.h #ifndef APP_QUEUE_H #define APP_QUEUE_H#include <stdint.h& ...
最新文章
- WebStorm下ReactNative代码提示设置
- python设计模式(十三):解释器模式
- 超全的数据库建表/SQL/索引规范,适合贴在工位上!
- timer.schedule定时器用法
- Linux基础急速入门:用 TCPDUMP 抓包
- Javamysql语法转化oracle_MyBatis项目实战 快速将MySQL转换成Oracle语句
- E - 娜娜梦游仙境系列——莫名其妙的插曲
- GFLOPS和GMACS概念
- 解密微软Longhorn和Office 12发布时间表
- linux 释放内存
- array unshift php,php – 用于多维数组的array_unshift
- 供应博思特posital增量型编码器
- 七牛云上传视频并转码
- 复合材料层合板数值模拟_51CAE_新浪博客
- #includelt;和#include
- 西门子PID调节仿真程序,1200plc和1500plc通用,只需一个PLC实物,就能轻松实现PID工艺对象的仿真
- AMD移动双显卡驱动14.4_WHQL正式版64位_byTimer0677
- R语言——如何调用自己写的函数
- 最新C#/CLR的访谈录( 访Peter Hallam)
- 金蝶K3案例教程固定资产后台配置