练习42:栈和队列

    到现在为止,你已经知道了大多数用于构建其它数据结构的数据结构。如果你拥有一些、DArrayHashmapTree,你就能用他们构造出大多数其它的任何结构。你碰到的其它任何结构要么可以用它们实现,要么是它们的变体。如果不是的话,它可能是外来的数据结构,你可能不需要它。

    我能够只通过C预处理器和两个头文件来实现这两个数据结构。我的头文件只有21行的长度,并且实现了所有StackQueue的操作,不带有任何神奇的定义。

    我将会向你展示单元测试,你需要实现头文件来让它们正常工作。你不能创建stack.cqueue.c实现文件来通过测试,只能使用stack.hqueue.h来使测试运行。

    你应该在不修改测试文件的条件下,使单元测试能够运行,并且它应该能够通过valgrind而没有任何内存错误。下面是当我直接运行时它的样子:

    queue_test的输出基本一样,所以我在这里就不展示了。

    完全在头文件中来实现它们的缺点,是你并不能够轻易地对它做性能调优。你需要使用这种技巧,建立一种以特定的方式使用List的“协议”。做性能调优时,如果你优化了List,这两种数据结构都会有所改进。

    附加题