代码拉取完成,页面将自动刷新
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include "Common.h"
#define STACK_INIT_SIZE 100//定义栈的初始长度
#define STACKINCREMENT 10 //定义栈每次追加分配的长度
//实现栈的数据类型
typedef struct
{
SElemType* elem;
int top;
int stacksize;
}Stack;
//栈的各项操作的实现
Status InitStack(Stack& s)
{
//初始化栈
s.elem = new SElemType[STACK_INIT_SIZE];
if (!s.elem) return OVERFLOW;
s.top = -1;
s.stacksize = STACK_INIT_SIZE;
return OK;
}
Status DestroyStack(Stack& s)
{
//销毁栈
delete s.elem;
s.top = -1; s.stacksize = 0;
return OK;
}
Status ClearStack(Stack& s)
{
//当栈存在时将栈清空
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
s.top = -1;
return OK;
}
Status StackEmpty(Stack& s)
{
//判断栈空与否,空时返回TRUE,否则返回ERROR.
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
if (s.top < 0) return TRUE;
return FALSE;
}
int StackLength(Stack s)
{
//返回栈的长度
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
return s.top + 1;
}
Status GetTop(Stack s, SElemType& e)
{
//当栈存在且不空时返回栈顶元素
//当栈不存在或栈空时返回出错信息
if (!s.elem) return ERROR;
if (s.top < 0) return ERROR;
e = s.elem[s.top];
return OK;
}
Status Push(Stack& s, SElemType e)
{
//当栈存在时压栈
//当栈不存在时返回出错信息
if (!s.elem) return ERROR;
if ((s.top + 1) == s.stacksize) { //当栈的初始空间已满
SElemType* temp = s.elem; int i; //为栈重新分配存储空间
s.stacksize += STACKINCREMENT;
s.elem = new SElemType[s.stacksize];
if (!s.elem) return OVERFLOW; //当分配失败时返回出错信息
for (i = 0; i <= s.top; i++) s.elem[i] = temp[i];
delete temp;
}// if
s.top += 1;
s.elem[s.top] = e;
return OK;
}
Status Pop(Stack& s, SElemType& e)
{
//当栈存在且不空时退栈
//当栈不存在或栈空时返回出错信息
if (!s.elem) return ERROR;
if (s.top < 0) return ERROR;
e = s.elem[s.top];
s.top -= 1;
return OK;
}
Status StackTraverse(Stack s, int (*visit)(SElemType& e))
{
//当栈存在且不空时调用visit函数对栈作由底到头的遍历
//当visit函数调用失败返回错误信息
//当栈不存在或栈空时返回出错信息
int i;
if (!s.elem) return ERROR;
if (s.top < 0) return ERROR;
for (i = 0; i <= s.top; i++) visit(s.elem[i]);
return OK;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。