📄 stack.cpp
字号:
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !\n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !\n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void (*Fun)()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!\n",i);
}
else
{
printf("\n\thappen a error\n\t");
}
}
int tem;
printf("now i will print this top of statck !\n");
GetTop(statck,tem);
printf("%d is top of this statck\n",tem);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -