纪念逝去的岁月——C++实现一个栈
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
纪念逝去的岁月——C++实现一个栈的更多相关文章
- 纪念逝去的岁月——C++实现一个栈(使用类模板)
这个版本是上个版本的加强版,上个版本的代码:http://www.cnblogs.com/fengbohello/p/4542912.html 目录 1.代码 2.运行结果 1.代码 1.1 调试信息 ...
- 纪念逝去的岁月——C++实现一个队列(使用类模板)
1.代码 2.运行结果 1.代码 #include <stdio.h> #include <string.h> template <typename T> clas ...
- 纪念逝去的岁月——C/C++排序二叉树
1.代码 2.运行结果 3.分析 1.代码 #include <stdio.h> #include <stdlib.h> typedef struct _Node { int ...
- 纪念逝去的岁月——C/C++二分查找
代码 #include <stdio.h> int binarySearch(int iList[], int iNum, int iX, int * pPos) { if(NULL == ...
- 纪念逝去的岁月——C/C++快速排序
快速排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 纪念逝去的岁月——C/C++交换排序
交换排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 纪念逝去的岁月——C/C++选择排序
选择排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 纪念逝去的岁月——C/C++冒泡排序
冒泡排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 纪念逝去的岁月——C/C++字符串回文
判断字符串是否是回文: 1. 输入:hello world dlrow olleh 输出:1 2. 输入:nihao hello 输出:0 代码 #include <stdio.h> #i ...
随机推荐
- HDU2205 又见回文(区间DP)
题意:给定两个字符串(可能为空串),求这两个串交叉组成新串的子串中的回文串的最大长度. 布尔型变量dp[i][j][k][l]表示串a从i到j,b从k到l能否组成新串,初始化为false,则采取区间动 ...
- C# 重绘tabControl,添加关闭按钮(页签)
C# 重绘tabControl,添加关闭按钮(页签) 调用方法 参数: /// <summary> /// 初始化 /// </summary> /// <param n ...
- hdu 4274 2012长春赛区网络赛 树形dp ***
设定每个节点的上限和下限,之后向上更新,判断是否出现矛盾 #include<cstdio> #include<iostream> #include<algorithm&g ...
- winedt打开.tex文件时会出现reading error,看不到任何文字
winedt打开.tex文件时会出现reading error,然后看不到任何文字. 解决办法:先打开空白的winedt,然后点击open,找到该.tex文件,将文件名右侧的 default 改为 ...
- 内核函数KiFastCallEntry
KiFastCallEntry() 机制分析 概述 Win32 子系统 API 调用 ntdll!ZwWriteFile() 函数 ntdll!KiFastSystemCall() 函数 _KUSER ...
- checkbox全选和子选
用jq: $(function() { var $subBox = $("input[name='subBox']"); $("#checkAll").clic ...
- 查询sqlserver 正在执行的sql语句的详细信息
SELECT [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), [User] = nt_username, [Status] = er ...
- JavaScript案例一:Window弹窗案例
注:火狐可运行,谷歌不可运行(安全级别高) <!DOCTYPE html> <html> <head> <title>JavaScript 弹窗案例&l ...
- 【spring】 <tx:annotation-driven /> 的理解 【转载的】
在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...
- 在Android上用AChartEngine轻松绘制图表
本文由 伯乐在线 - LeonHover 翻译.未经许可,禁止转载!英文出处:jaxenter.欢迎加入翻译组. Android发布不久的2008年底,开发者们已经开始寻找制表.制图.绘图的工具库.当 ...