您的位置:首页 > 其它

"《算法导论》之‘栈’":栈的三种实现(静态数组、动态数组及指针)

2014-11-04 15:33 477 查看
  本文有关栈的介绍部分参考自网站数据结构

  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/.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: