当数组是C中的struct类型时,如何检查条目数组的第一个条目是不是为空?

Posted

技术标签:

【中文标题】当数组是C中的struct类型时,如何检查条目数组的第一个条目是不是为空?【英文标题】:How to check if the first entry of an array of entries is empty when the array is of type struct in C?当数组是C中的struct类型时,如何检查条目数组的第一个条目是否为空? 【发布时间】:2021-12-25 01:08:05 【问题描述】:

我必须为 Uni 编写一个程序,其中应该有一个具有优先级的队列,并且在队列中应该有一个条目数组,每个条目需要 31 个字符。还需要一个函数来检查队列是空的还是满的。我已经编写了这段代码,但它不起作用,我得到错误 invalid oprands to binary == (have entry and 'int'):

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

enum priority 
    H, h, n, l, L      //Priority enum Highest = 0 Lowest = 4
;

typedef struct entry
    enum priority priorityvar;
    char message[31];
 entry;

typedef struct pqueue 
    entry entries[10];
 pqueue;

int isEmpty(pqueue* pqueue)
    if (pqueue->entries[0] == 0)
        return 1;
    else
        return 0;

int isFull(pqueue* pqueue)
    if (pqueue->entries[9] != 0)
        return 1;
    else
        return 0;

我也尝试将 0 替换为 NULL,但这也不起作用,我将非常感谢任何帮助!非常感谢!!

Ps:我还必须稍后编写一个函数,其中第一个条目被打印和删除,而所有其他 etries 在队列中“向上”移动 1,我不知道如何实现它。如果有人有想法,非常感谢!

【问题讨论】:

您可能希望 sizecapacity 分开,(固定为 10。)并非所有 10 个项目都始终是满的,因此您必须有一个 size in你的pqueue 旁白:那是return 1; 还是return l;?请避免使用看起来像数字的名称,您会使代码更难阅读,容易混淆和出错。知道代码中使用了l,每次看到1,我都必须仔细眯起眼睛,确保它不是l,失去了对大局的关注。 即返回 1(真)。我明白你在说什么,但不幸的是我有一些变量和函数名称,因为我不允许更改 优先级队列的规范实现是堆。事实上,这些术语有时可以互换使用(但现在更少了)。 此外,C 数组永远不会为空。可能它们的元素都不包含对程序目的很重要的数据,但这是完全不同的事情:元素存在,但您想忽略它们。要跟踪这一点,您需要一个外部指标来指示哪些/多少元素包含有效数据,或者您需要元素本身支持一个您可以通过编程识别为指示“无数据”的值。 【参考方案1】:

pqueue 是函数isEmpty 中的一个指针,它指向一个条目数组。您正在访问数组条目,当您编写pqueue-&gt;entries[0] 时,您正在访问类型为entry 的元素,但这不是检查它是否为NULL 的指针!你应该做的是创建一个变量,在结构pqueue中说下一个告诉你下一个空点在哪里,给它一个初始值-1,你会检查它是否-1,然后是你的队列为空,以此类推,添加元素时,在添加之前将其加 1。

【讨论】:

非常感谢,这对您有很大帮助!!还有一个问题,为什么建议使用 -1 而不是 0 来初始化 count 变量? 没有理由,但由于您要创建队列,实际上需要 2 个变量,一个用于前面,另一个用于后面! 你这是什么意思?什么前,什么后?我知道在 pqueue 结构内实现了一个 queuelength 变量。我还缺少什么?

以上是关于当数组是C中的struct类型时,如何检查条目数组的第一个条目是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 将struct数组传递给另一个struct的init

c struct queue error:“数组类型具有不完整的元素类型”

在结构中过滤struct数组

强制数组中的条目为 julia 中的整数

当检查可以是字符串数组中的一个或多个项目时,如何将列表视图项目添加到数组中?

如何使用动态数量的数据条目初始化表单集