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