算法学习之旅,初级篇(21)--栈的实现
来源:互联网 发布:mac 连接文件服务器 编辑:程序博客网 时间:2024/05/16 18:09
介绍
使用c实现栈的功能。
分析
实现入栈,出栈,初始化,获得栈顶元素。
代码
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 100
#define OK 1
#define ERROR -1
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
//压栈
int Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
(*S.top)=e;
(S.top)++;
return OK;
}
//出栈
int Deush(SqStack &S,SElemType &e)
{
if(S.top==S.base)
return ERROR;
(S.top)--;
e=(*S.top);
return OK;
}
//获得top元素
int GetTop(SqStack S,SElemType &e)
{
if(S.top==S.base)
return ERROR;
(S.top)--;
e=(*S.top);
return OK;
}
int main()
{
SqStack S;
int m_e=2;
InitStack(S);
for(int i=0;i<10;i++)
Push(S,i);
for(int i=0;i<10;i++)
{
Deush(S,m_e);
printf("%d ",m_e);
}
system("pause");
return 0;
}
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 100
#define OK 1
#define ERROR -1
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
//压栈
int Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
(*S.top)=e;
(S.top)++;
return OK;
}
//出栈
int Deush(SqStack &S,SElemType &e)
{
if(S.top==S.base)
return ERROR;
(S.top)--;
e=(*S.top);
return OK;
}
//获得top元素
int GetTop(SqStack S,SElemType &e)
{
if(S.top==S.base)
return ERROR;
(S.top)--;
e=(*S.top);
return OK;
}
int main()
{
SqStack S;
int m_e=2;
InitStack(S);
for(int i=0;i<10;i++)
Push(S,i);
for(int i=0;i<10;i++)
{
Deush(S,m_e);
printf("%d ",m_e);
}
system("pause");
return 0;
}
遇到的问题
exit是一个函数,进程退出时会有一个值,exit函数的参数就是指明进程退出的返回值,操作系统根据这个值来判断是否是正常退出。你也可以通过GetExitCodeProcess来获取这个值(windows下),一般情况下退出值是0表示正常(exit(0)),其它情况都是不正常的。
阅读全文
0 0
- 算法学习之旅,初级篇(21)--栈的实现
- 算法学习之旅,初级篇(20)--队列的实现
- 算法学习之旅,初级篇(1)--大小写转换
- 算法学习之旅,初级篇(2)--水仙花数
- 算法学习之旅,初级篇(4)--哈密尔顿距离
- 算法学习之旅,初级篇(5)--数码平方和
- 算法学习之旅,初级篇(6)--统计字符
- 算法学习之旅,初级篇(7)--数字塔
- 算法学习之旅,初级篇(9)--字符串逆序
- 算法学习之旅,初级篇(10)--回文字符串
- 算法学习之旅,初级篇(12)--最小公倍数
- 算法学习之旅,初级篇(13)--素数判定
- 算法学习之旅,初级篇(15)--分数加减法
- 算法学习之旅,初级篇(17)--质因数分解
- 算法学习之旅,初级篇(18)--哥德巴赫猜想
- 算法学习之旅,初级篇(19)--替换空格
- 算法学习之旅,初级篇(22)--循环队列
- 算法学习之旅,初级篇(11)--凯撒的密码
- 5个不知道的CSS属性
- 最少拦截系统 (贪心算法)
- 数据库中的sql语句优化
- ref总结
- poj1942组合数学
- 算法学习之旅,初级篇(21)--栈的实现
- java基础
- Laravel Application Object
- Greendao操作数据库
- ubuntn常用备份方法
- 基于HTML5 Boilerplate创建自己的项目
- 编码类型及python中实现转换
- access中数据类型转换函数
- spaCy-入门01-windows 环境搭建