C++结构本身?

Dou*_*las 8 c c++ python huffman-code

我一直在尝试将这段代码移植到python中,但是我在C++中有一些我不太了解的东西(我确实知道一些C++,但这超出了我的范围):

typedef struct huffnode_s
{
    struct huffnode_s *zero;
    struct huffnode_s *one;
    unsigned char val;
    float freq;
} huffnode_t;
Run Code Online (Sandbox Code Playgroud)

我没有得到的是huffnode_s本身是如何形成的,我以前从未见过它并且不太了解它.这是什么意思,如果有人可以,那python等同于什么?

Car*_*rum 19

huffnode_s是不是在自身内,只有指针huffnode_s都在那里.由于指针具有已知大小,因此没有问题.


S.L*_*ott 11

这个.

class Huffnode(object):
    def __init__(self, zero, one, val, freq):
        """zero and one are Huffnode's, val is a 'char' and freq is a float."""
        self.zero = zero
        self.one = one
        self.val = val
        self.freq = freq
Run Code Online (Sandbox Code Playgroud)

然后,您可以将各种C函数重构为此类的方法.

或许这个.

from collections import namedtuple
Huffnode = namedtuple( 'Huffnode', [ 'zero', 'one', 'val', 'freq' ] )
Run Code Online (Sandbox Code Playgroud)

如果您希望C函数保持功能.

而已.

h0 = Huffnode(None, None, 'x', 0.0)
h1 = Huffnode(None, None, 'y', 1.0)
h2 = Huffnode(h0, h1, 'z', 2.0)
Run Code Online (Sandbox Code Playgroud)

这就是所需要的.


Ram*_*ngh 4

它本身没有结构。它有一个指向该结构的指针。

在内存中struct huffnode_s看起来像(32 位机器):


|------------------ huffnode_s* 零 - 4 字节 --------------|

|------------------ huffnode_s* 1 - 4 字节----------------|

|unsigned char val - 1 字节 + 3 字节填充=======|

|------------------- 浮点频率 - 4 字节 ------------------------- |


这些大小会因机器而异,并且它在内存中的外观由编译器决定。