"《算法导论》之‘栈’":栈的三种实现(静态数组、动态数组及指针)
2014-11-04 15:33
477 查看
本文有关栈的介绍部分参考自网站数据结构。
(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
BoostUnitTest.cpp
本篇博文的代码均托管到Taocode : http://code.taobao.org/p/datastructureandalgorithm/src/.
1. 栈
1.1 栈的定义
栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
#define BOOST_TEST_MODULE Stack_Test_Module #include "stdafx.h" #include "../Stack/stack.hpp" struct Stack_Fixture { public: Stack_Fixture() { testStack = new Stack<int>(); } ~Stack_Fixture() { delete testStack; } Stack<int> * testStack; }; BOOST_FIXTURE_TEST_SUITE(Stack_Test_Fixture, Stack_Fixture) BOOST_AUTO_TEST_CASE(Stack_Test) { // isEmpty ------------------------------------ BOOST_REQUIRE(testStack->isEmpty() == true); // isEmpty ------------------------------------ BOOST_REQUIRE(testStack->getSizeOfStack() == 0); // push & top --------------------------------- BOOST_REQUIRE(testStack->push(1) == true); BOOST_REQUIRE(testStack->top() == 1); BOOST_REQUIRE(testStack->getSizeOfStack() == 1); BOOST_REQUIRE(testStack->push(2) == true); BOOST_REQUIRE(testStack->top() == 2); BOOST_REQUIRE(testStack->getSizeOfStack() == 2); BOOST_REQUIRE(testStack->push(3) == true); BOOST_REQUIRE(testStack->top() == 3); BOOST_REQUIRE(testStack->getSizeOfStack() == 3); // pop & top ---------------------------------- BOOST_REQUIRE(testStack->pop() == true); BOOST_REQUIRE(testStack->top() == 2); BOOST_REQUIRE(testStack->getSizeOfStack() == 2); BOOST_REQUIRE(testStack->pop() == true); BOOST_REQUIRE(testStack->top() == 1); BOOST_REQUIRE(testStack->getSizeOfStack() == 1); BOOST_REQUIRE(testStack->pop() == true); BOOST_REQUIRE(testStack->getSizeOfStack() == 0); BOOST_REQUIRE(testStack->pop() == false); } BOOST_AUTO_TEST_CASE(Stack_CopyConstructor_Test) { // initialize --------------------------------- BOOST_REQUIRE(testStack->push(1) == true); BOOST_REQUIRE(testStack->push(2) == true); BOOST_REQUIRE(testStack->push(3) == true); Stack<int> * testStack2 = new Stack<int>(*testStack); BOOST_REQUIRE(testStack2->getSizeOfStack() == 3); BOOST_REQUIRE(testStack2->top() == 3); BOOST_REQUIRE(testStack2->pop() == true); BOOST_REQUIRE(testStack2->top() == 2); BOOST_REQUIRE(testStack2->getSizeOfStack() == 2); BOOST_REQUIRE(testStack2->pop() == true); BOOST_REQUIRE(testStack2->top() == 1); BOOST_REQUIRE(testStack2->getSizeOfStack() == 1); BOOST_REQUIRE(testStack2->pop() == true); BOOST_REQUIRE(testStack2->getSizeOfStack() == 0); BOOST_REQUIRE(testStack2->pop() == false); } BOOST_AUTO_TEST_CASE(Stack_EqualOperator_Test) { // initialize --------------------------------- BOOST_REQUIRE(testStack->push(1) == true); BOOST_REQUIRE(testStack->push(2) == true); BOOST_REQUIRE(testStack->push(3) == true); Stack<int> * testStack2 = new Stack<int>(); *testStack2 = *testStack; BOOST_REQUIRE(testStack2->getSizeOfStack() == 3); BOOST_REQUIRE(testStack2->top() == 3); BOOST_REQUIRE(testStack2->pop() == true); BOOST_REQUIRE(testStack2->top() == 2); BOOST_REQUIRE(testStack2->getSizeOfStack() == 2); BOOST_REQUIRE(testStack2->pop() == true); BOOST_REQUIRE(testStack2->top() == 1); BOOST_REQUIRE(testStack2->getSizeOfStack() == 1); BOOST_REQUIRE(testStack2->pop() == true); BOOST_REQUIRE(testStack2->getSizeOfStack() == 0); BOOST_REQUIRE(testStack2->pop() == false); } BOOST_AUTO_TEST_SUITE_END()
BoostUnitTest.cpp
本篇博文的代码均托管到Taocode : http://code.taobao.org/p/datastructureandalgorithm/src/.
相关文章推荐
- "《算法导论》之‘队列’":队列的三种实现(静态数组、动态数组及指针)
- "《算法导论》之‘线性表’":基于静态分配的数组的顺序表
- "《算法导论》之‘线性表’":基于数组实现的单链表
- 如何 "使用" 静态方法约束实现类或子类
- "《算法导论》之‘线性表’":基于指针实现的单链表
- Delphi 指针, 静态数组, 动态数组
- "《算法导论》之‘线性表’":基于动态分配的数组的顺序表
- mysql存储过程以"数组"形式入参实现表间复制 并实现回滚
- 用javascript实现文本框和"选择"按扭之间的间距
- 使用" 参数化基类" 和" 成员函数指针" 模拟实现虚函数--在实际中的应用
- 静态数组实现的堆栈
- delphi 动态数组和静态数组首地址的区别
- 用javascript实现文本框和"选择"按扭之间的间距
- 数组与指针---都是"退化"惹的祸(转)
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 习题2.8 随机数组的三种生成算法(补) 将bash的实现翻译成比较纯正的bash风格
- 在DataTable中实现DataTable.Select("Distinct")功能/数组的方式实现DataTable中的distinct
- 静态数组实现堆栈
- windowsxp下三种实现"忽略驱动程序签名"的方法
- 静态数组和动态数组
- 静态数组实现的队列