不能小看这些基本的数据结构,写了才发现还是会有问题出现的。
有码有真相:
#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("\n");
}
测试代码:
#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) != '\0')
{
++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();
}