スタックの基本関数C++実装
先日、自分でいくつかのブログに従ってスタックのC++を模写し、その間にもいくつかの問題が発生しましたが、デバッグを通じて、各基本関数が検証されました.もちろん私が知らない問題があるかもしれませんが、もしパートナーが私のコードを検証している間に問題が発生したら、私に教えてほしいです.ありがとうございます.
コードは次のとおりです.
Stack.hファイル
Stack.cppファイル
コードは次のとおりです.
Stack.hファイル
#pragma once
//
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int ElemType;
//
struct StackNode
{
ElemType value;
StackNode *ptr;
};
//
class Stack
{
public:
//
Stack();
//
~Stack();
//
bool InitStack();
//
bool DestroyStack();
//
void ClearStack();
// 。 true, false
bool StackEmpty();
//
int StackLength();
//
ElemType GetTop();
//
void Push(ElemType e);
//
ElemType Pop();
// ,
void StackTraverse();
private:
StackNode *top;
StackNode *base;
int stacksize;
};
Stack.cppファイル
#include"Stack.h"
#include
#include
//
Stack::Stack()
{
top = NULL;
base = NULL;
stacksize = 0;
}
//
Stack::~Stack()
{
}
//
bool Stack::InitStack()
{
base = new StackNode[STACK_INIT_SIZE];
if (!base)
{
std::cout << " " << std::endl;
return false;
}
top = base;
stacksize = STACK_INIT_SIZE;
return true;
}
//
bool Stack::DestroyStack()
{
if (base)
{
delete base;
base = NULL;
top = NULL;
stacksize = 0;
std::cout << " " << std::endl;
return true;
}
else
{
std::cout << " , " << std::endl;
return false;
}
}
//
void Stack::ClearStack()
{
top = base;
}
//
bool Stack::StackEmpty()
{
if (base == top)
{
return true;
}
else
{
return false;
}
}
//
int Stack::StackLength()
{
return (top - base);
}
//
ElemType Stack::GetTop()
{
ElemType e;
if (top >base)
{
e =(top--)->value;
return e;
}
else
{
return false;
}
}
//
void Stack::Push(ElemType e)
{ // ,
if (top -base >= stacksize)
{
base = (StackNode*)realloc(base,stacksize + STACKINCREMENT*sizeof(StackNode));
if (!base)
{
std::cout << " " << std::endl;
exit(-1);
}
top = base +stacksize;
stacksize += STACKINCREMENT;
}
/* , 1*/
top->value = e;
top++;
stacksize++;
}
/* , */
//void Stack::Push(ElemType data)
//{
// StackNode *temp;
// temp = (StackNode *)new StackNode[1];
// temp->value = data;
// temp->next = NULL;
// if (stacksize == 0)
// { top = (StackNode *)new StackNode[1];
// base = temp;
// }
// top->next = temp;
// top = temp;
// stacksize++;
// std::cout << "Push: !" << std::endl;
//}
//
ElemType Stack::Pop()
{
ElemType e;
if (top == base)
{
std::cout << " , " << std::endl;
exit(-1);
}
else
{
e = (--top)->value;
top->value = 0;
stacksize--;
return e;
}
}
//
void Stack::StackTraverse()
{
ElemType e=0;
if (top==base)
{
std::cout << " , " << std::endl;
exit(-1);
}
else
{
std::cout << " :";
do
{
e=Pop();
std::cout <value << " ";
} while (top!=base);
std::cout << std::endl;
}
}