1、代码
2、运行结果
1、代码 stack.cpp
#include <stdio.h>
#include <string.h>
class ClsStack
{
private :
void ** __m_Data;
int __m_pos;
size_t __m_memsize;
protected :
int __resize(size_t n);
size_t __doublesize(size_t n);
public :
ClsStack(size_t n = 0);
~ClsStack();
int pop(void ** ppData);
int top(void ** ppData);
int push(void * pData);
void clear();
};
ClsStack::ClsStack(size_t n)
{
__m_Data = NULL;
__m_pos = -1;
__m_memsize = 0;
if(0 != n)
{
__m_Data = new void * [n];
if(NULL != __m_Data)
{
__m_memsize = n;
}
}
}
ClsStack::~ClsStack()
{
if(NULL != __m_Data)
{
delete __m_Data;
__m_Data = NULL;
}
__m_pos = -1;
__m_memsize = 0;
}
size_t ClsStack::__doublesize(size_t n)
{
size_t x = 0;
if(0 == n)
{
x = 1;
}
else
{
x = n * 2;
}
return x;
}
int ClsStack::__resize(size_t n)
{
void ** p = new void * [n];
if(NULL == p)
{
return -1;
}
memset(p, 0, sizeof(void *) * (n));
if(NULL != __m_Data)
{
if( NULL == memcpy(p, __m_Data, __m_memsize * sizeof(void *)))
{
delete p;
return -1;
}
delete __m_Data;
}
__m_Data = p;
__m_memsize = n;
return 0;
}
int ClsStack::pop(void ** ppData)
{
if(NULL == ppData)
{
return -1;
}
int r = 0;
if(-1 == __m_pos)
{
*ppData = NULL;
r = -1;
}
else
{
*ppData = __m_Data[__m_pos --];
r = 0;
}
return r;
}
int ClsStack::top(void ** ppData)
{
if(NULL == ppData)
{
return -1;
}
int r = 0;
if(-1 == __m_pos)
{
*ppData = NULL;
r = -1;
}
else
{
*ppData = __m_Data[__m_pos];
r = 0;
}
return r;
}
int ClsStack::push(void * pData)
{
if(__m_pos + 1 >= __m_memsize)
{
size_t n = __doublesize(__m_memsize);
if(0 != __resize(n))
{
return -1;
}
}
__m_Data[++__m_pos] = pData;
return 0;
}
void ClsStack::clear()
{
if(NULL != __m_Data && 0 != __m_memsize)
{
delete __m_Data;
}
__m_Data = NULL;
__m_pos = -1;
__m_memsize = 0;
}
int main()
{
ClsStack objStack;
int x = 10;
int * p = &x;
objStack.push(p);
int i = 0;
for(i = 0; i <= 10; i++)
{
int * z = new int;
*z = i;
objStack.push(z);
}
for(i = 10; i >= 0; i--)
{
int * z = NULL;
int r = objStack.pop((void **)&z);
if(NULL == z)
{
printf("z == NULL\n");
continue;
}
if(i == *z)
{
printf("RIGHT\n");
}
else
{
printf("WRONG\n");
}
delete z;
}
int * g = NULL;
int r = objStack.pop((void **)&g);
if(x == *g)
{
printf("RIGHT\n");
}
else
{
printf("WRONG\n");
}
return 0;
}
2、编译及运行
2.1、编译
g++ -g -o stack stack.o
2.2运行
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
原文链接: https://www.cnblogs.com/fengbohello/p/4542912.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/216889
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!