制作一个函数来计算C语言中PriorityQueue中的元素数量

廷·塞蒂奇

任务:

我正在为我的结构与算法大学班的家庭作业。任务是使用堆在C中实现优先级队列并形成主体,以便它可以支持以下操作:

INSERT(在优先级队列中插入字符串)
DELETE(删除优先级最低的元素)
NUMBER(返回优先级队列中的元素)

每次我们在主体中编写操作时,也应该打印出优先级队列的前序。我们可以假设堆是通过指针实现的。所以我以如下形式实现了它:

typedef char* elementtype;

typedef struct celltag {
    elementtype zapis;
    struct celltag *left, *right, *parent;
}   celltype;

typedef celltype* node;
typedef celltype* PriorityQueue;

我还实现了以下功能:

void PrMakeNull(PriorityQueue *Ap)
int PrEmpty(PriorityQueue A)
void PrInsert(elementtype x, PriorityQueue *Ap)
elementtype PrDeleteMin(PriorityQueue *Ap)
void Preorder(PriorityQueue A)

问题:
我应该用这样的标题实现“数字功能”:

int Number(PriorityQueue P)

该函数在调用Number(A)之后不应更改Priority QueueA。同样,该功能应独立于Priority Queue实现。(我认为这意味着我应该只使用PrMakeNull,PrEmpty,PrInsert,PrDeleteMin)。那有可能吗?我该怎么办?看起来如何?

我尝试过的事情:
1)

//This one is independent on Priority Queue implementation but destroys the Priority Queue. 
int Number(PriorityQueue P){
    PriorityQueue S;
    PrMakeNull(&S);
    int counter=0;
    while(!PrEmpty(P))
    {
        PrInsert(PrDeleteMin(&P), &S);
        counter++;
    }
    while(!PrEmpty(S))
    {
        PrInsert(PrDeleteMin(&S), &P);
    }
    return counter;
}

2)

//This one is dependent on Priority Queue implementation but doesn't destroy the Priority Queue. 
int Number(PriorityQueue A){
    int returning_number=1;
    if (A == NULL)
        return 0;
    if(A->left!=NULL)
        returning_number+=Number(A->left);
    if(A->right!=NULL)
        returning_number+=Number(A->right);
    return returning_number;
}
齐格剃刀

您可以使用不依赖于您列出的函数的递归算法来解决此问题。代码可能像这样:

int Number(PriorityQueue A)
{
    if(!A) return 0;

    return 1 + Number(A->left) + Number(A->right);
}

我认为这是解决此问题的最佳方法。

如果您在递归方面遇到麻烦,请给我一个有用的链接:

递归

编辑:

我不认为这是一个可以从抽象的优先级队列这个结构,因为实施PrEmptyPrInsertPrDeleteMin,和Preorder已经依赖于优先级队列的结构。那么,为什么要搜索仅依赖于这些功能的实现呢?同样,您可以定义另一个函数,该函数搜索元素而不删除它们,并在与上述函数相同的级别上实现它,或者最好是在优先级队列上使用简单的迭代器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

计算矩阵中每一行的元素数量

函数无法正确计算元素数量

结构中的一个元素可以在C语言中访问其自身的另一个元素吗?

如何计算int类型数组中的元素数量,其中0可以是一个元素?

根据用户在C语言中请求的元素数量创建链接列表

在对数据框的一列进行装箱后,如何制作一个新的数据框以计算每个箱中的元素数量?

如何调用另一个函数来填充C中数组的元素?

Python中是否有一个函数来计算从“ for”循环中创建的带有中断的输出数量?

在C#mongodb驱动程序中制作一个唯一元素数组

一种计算另一个元素之间的元素数量并返回数组的方法

在C语言中,为什么将sizeof函数用作存储数组中元素数量的分母?

写一个函数来计算给定字符串中回文子字符串的数量?

在C语言中,如何评估一个函数或另一个函数中的局部变量?

Glob函数在C语言中只给出一个结果

如何制作一个函数来删除C中的双字母?

c语言中一个数组可以存储的最大元素数

计算要在一个屏幕上的元素的宽度和高度,元素数量未知

计算一个值在c语言中出现的频率

C++如何编写一个函数来检查元素是否存在于动态分配的数组中

编写一个函数来计算玫瑰树中元素的数量

如何制作一个函数来找出两个等长数组的每个元素之间的差异

有效地计算一个列表中的元素数量少于其他某个列表中的元素

为什么我在以下计算链表中元素数量的代码中少计算一个

一个函数来计算一个元素的出现次数或频率并返回一个对象,但删除出现一个的元素并返回其余的元素

如何制作一个简单的函数来改变 sqlalchemy.orm 中的值

在 C 中创建一个函数来检查二维数组中是否有相邻的相等元素

如何制作一个函数来显示数组的前 N 个元素,直到元素大于常数

编写一个函数来计算 r 中的 CAGR

在c语言中使用只有一个参数的递归检查数字是否为素数