我正在将中缀表达式转换为前缀表达式,并已决定使用堆栈来保存我的表达式。我使用链表方法实现堆栈,并使用以下数据结构:

struct stacknode {
    char char_val;
    int int_val;
    struct stacknode *nextptr;
    struct stacknode *prevptr;
};

然后我为push()push_int()编写了两个不同的push_char()函数。
push_int()将值'\0'指定给char_val,然后将值推送到int_val
push_char()将值-1指定给int_val,然后将值推送到char_val
请注意,使用的所有整数值都大于0。
然后我编写了剩下的函数来处理这样一个事实:每个节点中的重要值可能是int或char,使用“\0”和-1的“否定”值来标识节点是“int”节点还是“char”节点。
从本质上说,我想知道我是否在错误地考虑数据结构有更好的办法吗?

最佳答案

虽然您的实现没有什么问题,但我认为使用tagged union可能更习惯/更明显。
然后你可以:

struct StackValue
{
    _Bool is_int;
    union
    {
        char c;
        int i;
    } data;
};

struct StackNode
{
    struct StackValue data;
    struct StackNode *nextptr, *prevptr;
};

关于c - C数据结构理论和技术-同一堆栈中的整数和字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24639616/

10-14 04:51