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 = );
~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 = -;
__m_memsize = ; if( != 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 = -;
__m_memsize = ;
} size_t ClsStack::__doublesize(size_t n)
{
size_t x = ;
if( == n)
{
x = ;
}
else
{
x = n * ;
} return x;
} int ClsStack::__resize(size_t n)
{
void ** p = new void * [n];
if(NULL == p)
{
return -;
}
memset(p, , sizeof(void *) * (n));
if(NULL != __m_Data)
{
if( NULL == memcpy(p, __m_Data, __m_memsize * sizeof(void *)))
{
delete p;
return -;
}
delete __m_Data;
}
__m_Data = p;
__m_memsize = n; return ;
} int ClsStack::pop(void ** ppData)
{
if(NULL == ppData)
{
return -;
}
int r = ;
if(- == __m_pos)
{
*ppData = NULL;
r = -;
}
else
{
*ppData = __m_Data[__m_pos --];
r = ;
} return r;
} int ClsStack::top(void ** ppData)
{
if(NULL == ppData)
{
return -;
}
int r = ;
if(- == __m_pos)
{
*ppData = NULL;
r = -;
}
else
{
*ppData = __m_Data[__m_pos];
r = ;
} return r;
} int ClsStack::push(void * pData)
{
if(__m_pos + >= __m_memsize)
{
size_t n = __doublesize(__m_memsize);
if( != __resize(n))
{
return -;
}
}
__m_Data[++__m_pos] = pData; return ;
} void ClsStack::clear()
{
if(NULL != __m_Data && != __m_memsize)
{
delete __m_Data;
}
__m_Data = NULL;
__m_pos = -;
__m_memsize = ;
} int main()
{
ClsStack objStack;
int x = ;
int * p = &x;
objStack.push(p);
int i = ;
for(i = ; i <= ; i++)
{
int * z = new int;
*z = i;
objStack.push(z);
}
for(i = ; i >= ; 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 ;
}

2、编译及运行

  2.1、编译

g++ -g -o stack stack.o

  2.2运行

RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT
RIGHT

最新文章

  1. [(ngModel)]的实现原理
  2. sql查询
  3. git 新建项目
  4. DIV+CSS圆角边框
  5. js判空
  6. MVC 特殊字符的显示
  7. color 的一些处理
  8. Android 创建单例模式的几种方法
  9. 第一次比赛的 C题 (好后面才补的....) CodeForces 546B
  10. c++ 继承多个类 及虚函数
  11. PCRE
  12. C++_内部类
  13. DOM Traversal Example | Documentation | Qt Project
  14. 联想A7600-m刷机心得
  15. HTML5发布的意义
  16. 驰骋工作流引擎JFlow与activiti的对比之2种结构化模式
  17. linux重启服务的脚本命令
  18. plsql中文乱码
  19. Docker系列07:Docker-compose
  20. codeforces387B

热门文章

  1. HDU5781 ATM Mechine(DP 期望)
  2. MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
  3. &lt;转&gt;SQL语句执行顺序说明
  4. Linux环境下使用shell编写CGI(httpd)
  5. Windows硬件断点-实现单步异常
  6. 长按事件jquery mobile
  7. pig的各种运行模式与运行方式详解
  8. Confluent Platform 3.0支持使用Kafka Streams实现实时的数据处理(最新版已经是3.1了,支持kafka0.10了)
  9. jsp网站环境搭建
  10. 新的开始—js客户端onlick无法响应