⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.h

📁 数据结构基本算法设计 用C++实现一个计算器,计算器需具有基本的功能
💻 H
字号:
#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;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -