顺序队列的实现:从创建到释放内存的完整代码示例
创作时间:
作者:
@小白创作中心
顺序队列的实现:从创建到释放内存的完整代码示例
引用
CSDN
1.
https://m.blog.csdn.net/m0_48572601/article/details/136664038
本文将详细介绍顺序队列的实现方法,包括创建队列、入队、出队、释放内存等基本操作。通过三个文件(sequeue.h、sequeue.c、test.c)的代码实现,展示顺序队列的具体操作过程,并附有运行结果图,验证了代码的正确性。
问题描述:顺序队列的实现。(功能实现:创建栈,进栈,出栈,释放内存等操作)。
代码实现:
实现一个功能函数需要三个文件(三个文件在同一目录)。
- sequeue.h(定义顺序表)
- sequeue.c(实现接口函数)
- test.c(主函数实现)
sequeue.h
定义各种函数。包括
- 创建队列sequeue * queue_create();
- 入队datatype dequeue(sequeuesq);
- 出队datatype dequeue(sequeuesq);
typedef int datatype;
#define N 128
typedef struct {
datatype data[N];
int front;
int rear;
}sequeue;
sequeue * queue_create();
int enqueue(sequeue *sq, datatype x);
datatype dequeue(sequeue *sq);
int queue_empty(sequeue *q);
int queue_full(sequeue *sq);
int queue_clear(sequeue *sq);
sequeue *queue_free(sequeue *sq);
sequeue.c
上述定义函数的实现。
#include "sequeue.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
sequeue * queue_create() {
sequeue *sq;
if ((sq = (sequeue *) malloc(sizeof(sequeue))) == NULL) {
printf("malloc failed\n");
return NULL;
}
memset(sq->data, 0, sizeof(sq->data));
sq->front = sq->rear = 0;
return sq;
}
int enqueue(sequeue *sq, datatype x){
if (sq == NULL){
printf("sq is NULL\n");
return -1;
}
if ((sq->rear + 1) % N == sq->front) {
printf("sequeue is full\n");
return -1;
}
sq->data[sq->rear] = x;
sq->rear = (sq->rear + 1) % N;
return 0;
}
datatype dequeue(sequeue *sq){
datatype ret;
ret = sq->data[sq->front];
sq->front = (sq->front + 1) % N;
return ret;
}
int queue_empty(sequeue *sq){
if (sq == NULL){
printf("sq is NULL\n");
return -1;
}
return (sq->front == sq->rear ? 1: 0);
}
int queue_full(sequeue *sq){
if (sq == NULL){
printf("sq is NULL\n");
return -1;
}
if ((sq->rear + 1) % N == sq->front) {
return -1;
}
else{
return 0;
}
}
int queue_clear(sequeue *sq){
if (sq == NULL){
printf("sq is NULL\n");
return -1;
}
sq->front = sq->rear = 0;
return 0;
}
sequeue *queue_free(sequeue *sq){
if (sq == NULL){
printf("sq is NULL\n");
return NULL;
}
free(sq);
sq = NULL;
return 0;
}
test.c
#include <stdio.h>
#include "sequeue.h"
int main(int argc, const char *argv[]) {
sequeue *sq;
if ((sq = queue_create()) == NULL) {
return -1;
}
enqueue(sq, 10);
enqueue(sq, 100);
enqueue(sq, 1000);
while (!queue_empty(sq)) {
printf("dequeue:%d\n", dequeue(sq));
}
return 0;
}
运行结果:
由上述结果图可知,成功运行创建队列,入队4个整数,,出队4个整数,释放内存等操作。(先进先出)
本文原文来自CSDN
热门推荐
深陷通胀泥沼,老挝该如何应对?
【日语歌翻译】Butter-Fly(和田光司《数码宝贝》OP)
中国海警局南海分局:持续强化海洋渔业执法
喉咙痛可以喝咖啡吗
面粉粉尘为什么会爆炸?如何预防粉尘爆炸事故?
如何正确设置手机邮箱服务器以确保邮件同步?
南京城边这座岛,竟“住”着7种国家一级保护动物
十类新能源汽车电池有哪些 新能源汽车用什么电池
痒痒痒,换季的烦恼?中医治疗有方法!
阿尔伯塔大学一年30万够吗?费用、学术实力全解析
股票图表解读技巧
怎样灭蚂蚁?全方位蚁虫除法大公开
夫妻双方自愿离婚协议书怎么写
标准误差和标准偏差
聊天高手秘籍:掌握这4个技巧,让每次聊天都充满意义
易筋经:从以气调形到周身通灵的修习步骤
不收门票!乐山12个好逛又好吃的古镇,你去过几个?
技术分析的三大假设、四大基本要素
潘复生院士建议消除“第一学历”歧视:公平选拔的必要
大型复杂项目管理怎么结合传统与敏捷
喉咙痛能喝什么饮料
宝宝喝奶时打头该如何处理?医生的专业建议来了
555定时器产生方波原理详解
驾驭Windows系统:手动更新驱动程序全攻略,让你轻松解决驱动问题
11人谈双11 | 2024双十一的主题是:告别
确认收入是在开票时还是预收时?一文详解企业收入确认原则
创新四川 | 锚定千亿级产业 小县城也有大梦想
贵州凯里:用酸汤与世界对话
南宁百亩油菜花田绽放,花期将持续至3月上中旬
茶饮过度的潜在影响及应对策略:如何避免全身无力和其他不适症状