顺序队列的实现:从创建到释放内存的完整代码示例
创作时间:
作者:
@小白创作中心
顺序队列的实现:从创建到释放内存的完整代码示例
引用
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
热门推荐
揭秘真相:酒精能否成为艾滋病毒的“克星”?
天然生物农药初学者指南:类型和使用方法
惠州茶山樱花谷:赏花泡汤两不误!
青岛茶山景区未来一周晴朗为主,适合出游!
春节临近!顺丰快递如何保障你的年货准时到家?
顺丰春节不打烊:食品配送安全大揭秘!
新能源汽车VS燃油车:谁更省钱?
新能源车夏日续航大挑战!这份高温使用指南请收好
华盛顿特区空难:真相调查与多元化政策之争
华盛顿特区空难调查新进展:黑匣子已找到!
《悲惨世界》:善恶一念之间,底层人物该如何面对人间冷暖?
福建特产盘点:茶叶、水果、美酒与美食样样俱全
孕期吃南瓜,益处多多!但该如何吃?
三伏天怎么养生?常喝这些粥,清热解暑,健脾祛湿,养胃助消化
秋天喝粥养人,12款秋季养生粥方备起来
贫血吃什么能补血
瑞丽&芒市必打卡景点推荐!
瑞丽VS芒市:谁是德宏州新宠?
哪吒闹海背后的文化密码
用什么方法可以提升乡村振兴战略规划的效率?
如何打造责任心强团队
石家庄元氏:南佐大集购物节 沉浸式解锁传统年味儿
汉代太傅:不只是太子导师那么简单!
来西安必吃的美食,你都吃了哪些?连老外都直夸好
Minecraft新手必看:如何体验最原始的游戏乐趣
为什么化疗一个周期是21天?化疗可以推迟吗?化疗期间如何进行饮食调理?
轮胎出现这些情况必须立即更换,否则危险随时可能发生
美国民权领袖约翰·刘易斯去世 曾是首批挑战南方种族隔离的“自由乘客”之一
马丁路德金国家历史公园游玩指南:开放时间、门票和建议
西安秦岭徒步路线全攻略:14条经典穿越路线详解