梦⁠回⁣从前 2022-04-04 18:07 采纳率: 25%
浏览 11
已结题

入队函数失效,不知道什么原因?

file.c文件


#include "file.h"

/*输入:  
 q:队列(数据结构  
 smax:队列中可以存储的最大元素数,也就是队列的长度 */

//给对列初始化
void initQueue(queue_t *q, int smax){ 
    //分配一个长度为smax的数组来存储队列元素  
    q->array = (int *)malloc(smax*sizeof(int));

    //初始化
    q->front = 0;
    q->rear = 0;
    q->size = 0;
    q->sizeMax = 0;
}

//释放队列内存空间
void freeQueue(queue_t *q){
    if (q->array){
        free(q->array);
    }
}

//元素入列
int enqueue(queue_t *q, int val){
    int insert = 0;

    /*首先检查队列是否满*/
    if (q->size < q->sizeMax){
        q->array[q->rear] = val;
        q->rear++;

        /*如果我们已经到达终点,那么后部返回0*/
        //此时如果运行了if语句就证明队列已经满了
        if (q->rear == q->sizeMax){
            q->rear = 0;
        }
        q->size++;
        insert = 1;
    }
    return insert;
}

//出队
void displayQueue(queue_t *q){
    int cpt = 0;

    printf("queue = ");
    while (cpt < q->size){
        //注意:队列并不总是从0开始
        printf("%d ", q->array[(q->front+cpt) % q->sizeMax]);
        cpt++;
    }
    printf("\n");
    
}

//检验队列是否满了  
int dequeue(queue_t *q){
    /*总是离开第一个元素(FIFO策略)*/
    int val = q->array[q->front];

    q->size--;
    q->front++;

    /*看看我们是否到达了数组的末端*/
    if (q->front == q->sizeMax)
        q->front = 0;

    return val;
}

//是否为空
int isEmptyQueue(queue_t *q){
    return (q->size == 0);
}

main.c文件


#include "file.h"

int main(){
    queue_t q;
    int N = 5;

    /*第一次初始化*/
    initQueue(&q, N);

    /*测试我们唯一的函数*/
    printf("queue Empty? %d\n", isEmptyQueue(&q));

    /*首先在队列中放入一些东西*/
    enqueue(&q, 10);
    enqueue(&q, 2);
    enqueue(&q, 7);

    /*输出打印*/
    displayQueue(&q);

    //打印单个队列元素
    printf("dequeue: %d\n", dequeue(&q));
    printf("dequeue: %d\n", dequeue(&q));
    printf("dequeue: %d\n", dequeue(&q));

    printf("queue Empty? %d\n", isEmptyQueue(&q));

    enqueue(&q, 20);
    enqueue(&q, 5);
    enqueue(&q, 14);
    enqueue(&q, 20);
    enqueue(&q, 5);
    enqueue(&q, 14);

    

    displayQueue(&q);
    
    freeQueue(&q);
    return 0;
}

file.h文件


#pragma once

#include <stdio.h>
#include <stdlib.h>

typedef struct queue
{
    /* data(数据) */
    int sizeMax;//数组最大容量(长度)
    int size;//实际容量(有效值数目)

    int front;//下一个删除的索引(即第一个元素的索引,如果不是空队列),front是下一个删除的标签
    int rear;//下一个插入的索引,rear是下一个添加的标签

    int *array;//存储队列的数组
}queue_t;

void initQueue(queue_t *q, int smax);
void freeQueue(queue_t *q);
int enqueue(queue_t *q, int val);
void displayQueue(queue_t *q);
int dequeue(queue_t *q);
int isEmptyQueue(queue_t *q);

makefile文件


exe: file.o main.o
    gcc -o exe file.o main.o
file.o: file.c file.h
    gcc -g -c file.c -Wall
main.o: main.c file.h
    gcc -g -c main.c -Wall
clean:
    rm exe file.o main.o

运行结果确实这样

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月12日
    • 创建了问题 4月4日

    悬赏问题

    • ¥15 Java与Hbase相关问题
    • ¥20 bash代码推送不上去 git fetch origin master #失败了
    • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
    • ¥45 工程软件单片机设计课题要求
    • ¥15 在centos7安装conda
    • ¥15 c#调用yolo3 dll文件获取的数据对不上
    • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
    • ¥15 STM32F103上电短路问题
    • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
    • ¥15 (标签-python|关键词-char)