问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

顺序队列的实现:从创建到释放内存的完整代码示例

创作时间:
作者:
@小白创作中心

顺序队列的实现:从创建到释放内存的完整代码示例

引用
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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号