スタックの基本関数C++実装

3270 ワード

先日、自分でいくつかのブログに従ってスタックのC++を模写し、その間にもいくつかの問題が発生しましたが、デバッグを通じて、各基本関数が検証されました.もちろん私が知らない問題があるかもしれませんが、もしパートナーが私のコードを検証している間に問題が発生したら、私に教えてほしいです.ありがとうございます.
コードは次のとおりです.
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;
	}

}