我看了你的堆栈结构。我认为是不太合适的,你的base分明是个ElementType数组(由stack_init_size在编译的时候确定),stacksize指示堆栈内容量(话说这个容量不是常量stack-init-size吗?),top居然又是个指针指向栈顶地址(都用数组了,又何必搞这个).
1.你要让base做数组,那么你只需要一个unsigned int 指示栈顶元素就好。至于堆栈状态是不是满的,反正有stack-init-size在何必大费周章在每个结构体里浪费空间做无意义的劳动?
2.我见过链表结构是 struct {ElementType*base;ElementType*Top;int StackSize;}的,不过人家的堆栈是base是个链表,Top指向base链表的尾结点(最后插入的元素),StackSize记录堆栈内现有容纳元素多少(可有可无,可以在后期通过遍历base链表得到)。用链表方式做堆栈,堆栈容量理论上是可以“无限大”的。用数组方法做堆栈如果想要健壮点的话可以效仿哈希算法的ReHash,每当数组内元素达到一定比例就构造一个双倍长度的数组,并将旧数组的元素复制过去。用新数组取代旧数组。效率上当然是远不如链表的方便快捷,但是数组构造法不需要频繁的malloc,free,时间上可能会更好些。