问题: 请对堆栈这种数据结构做出评论。用c 语言来实现一个堆栈,你可以选用链表或动态数组来实现你的堆栈;并请对你的决定做出解释。你为堆栈设计的程序接口必须完备、规范、和易于使用。
分析:这到题考察三个方面:1)对基本的抽象数据结构(堆栈)和底层数据结构(链表和动态数组)的理解和掌握程度;2)用编程语言实现和处理这些数据结构的能力;3)为一组相关例程设计一套规范化程序接口的能力。
(压入)和“pop”()弹出。
动态数组是一种总长度会随其中元素个数的增减而做出相应改变的数组。动态数组与链表的主要区别是前者的随机存取性(你可以立即存取任一元素),但因为堆栈上的操作永远出现在这种数据结构的尾部(即堆栈的栈顶),所以动态数组的随即存取性体现不出多大的优势。随着元素的增加,动态数组的总尺寸需要根据情况做出相应的调整,而这种调整是一项很耗时间的操作。从另一方面讲,如果安排得当,动态数组要比链表更有效率--因为链表必须为它的每个元素进行动态内存分配。链表还必须为它的每个元素准备一个指针,而这也要消耗一定的内存;要是你的堆栈只用来保存小尺寸的数据--比如整数,那么指针方面的额外开销将会占据一个显著的比例。考虑上述这些因素,一个基于动态数组的堆栈其性能将大大优于一个基于链表的堆栈。当考虑解决方案的简单易行,链表比动态数组更容易实现,所以选择链表。
首先,声明一个struct结构做为链表元素的数据类型,使用无类型(即void)指针来实现一个通用的解决方案:
typedef struct elementT{
struct elementT *next;
void *data;
}element;
void Push (element *stack, void *data);
void Pop (element *stack);

浙公网安备 33010602011771号