不能小看这些基本的数据结构,写了才发现还是会有问题出现的。
有码有真相:
#pragma once class MyStack { public: MyStack(void); ~MyStack(void); void Push(int aValue); int Top(); void Pop(); void PrintAll(); private: int* m_pData; int m_Len; int m_Top; };
#include "MyStack.h" #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> MyStack::MyStack(void) :m_pData(NULL) , m_Len(8) ,m_Top(0) { m_pData = (int*)malloc(sizeof(int)*m_Len); memset(m_pData,0,sizeof(int)*m_Len); } MyStack::~MyStack(void) { if (NULL != m_pData) { free(m_pData); m_pData = NULL; } } void MyStack::Push( int aValue ) { if (m_Top == m_Len) { m_Len = m_Len << 2; m_pData = (int*)realloc(m_pData,sizeof(int)*m_Len); } m_pData[m_Top++] = aValue; } void MyStack::Pop() { if (m_Top >= 0) { --m_Top; } else { printf("NoData/n"); } } int MyStack::Top() { if (m_Top>=0) { return m_pData[m_Top]; } else { printf("NoData/n"); return -1; } } void MyStack::PrintAll() { for (int i =0; i< m_Top;++i) { printf("%d ",m_pData[i]); } printf(" "); }
测试代码:
#include "stdio.h" #include "BinarySearchTree.h" #include "MyQueue.h" #include "MyStack.h" void CopyStr(char* aDestStr,const char* aSrcStr) { //assert(aDestStr && aSrcStr); char* lpStr = aDestStr; while((*aDestStr = *aSrcStr) != ' ') { ++aDestStr; ++aSrcStr; } } int main() { MyStack lStack; for (int i = 0; i< 30; ++i) { lStack.Push(i); } lStack.PrintAll(); lStack.Pop(); lStack.Pop(); lStack.PrintAll(); lStack.Pop(); lStack.Pop(); lStack.Pop(); lStack.Pop(); lStack.Pop(); lStack.PrintAll(); }