• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签: 数据结构  

资源简介

c++ 的 算术表达式求值 数据结构课程设计里的一个题 给一个完整的表达式 可以带括号 求值当用户输入一个合法的算术表达式后,能够返回正确的结果。能够计算的运算符包括:加、减、乘、除、括号;能够计算的操作数要求在实数范围内;对于异常表达式能给出错误提示。

资源截图

代码片段和文件信息

/***
*DynaSeqStack.cpp - 动态顺序栈,即栈的动态顺序存储实现
*
*
*题目:表达式求值
*
*班级:A1 北极
*
*姓名:邱继颖
*
*学号:2008010829
*
****/

#include 
#include 
#include 
#include 
#include “DynaSeqStack.h“

const int STACK_INIT_SIZE = 100; // 初始分配的长度
const int STACKINCREMENT  = 10; // 分配内存的增量

/*------------------------------------------------------------
操作目的: 初始化栈
初始条件: 无
操作结果: 构造一个空的栈
函数参数:
SqStack *S 待初始化的栈
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool InitStack(SqStack *S)
{
assert(S != NULL);
S->base = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);

if(S->base == NULL) return false;

S->top = S->base;
S->stacksize = STACK_INIT_SIZE;

return true;
}

/*------------------------------------------------------------
操作目的: 销毁栈
初始条件: 栈S已存在
操作结果: 销毁栈S
函数参数:
SqStack *S 待销毁的栈
返回值:

------------------------------------------------------------*/
void DestroyStack(SqStack *S)
{
assert(S != NULL);

free(S->base);
S->top = S->base = NULL;
}

/*------------------------------------------------------------
操作目的: 判断栈是否为空
初始条件: 栈S已存在
操作结果: 若S为空栈,则返回true,否则返回false
函数参数:
SqStack S 待判断的栈
返回值:
bool 是否为空
------------------------------------------------------------*/
bool StackEmpty(SqStack S)
{
assert((S.base != NULL) && (S.top != NULL));
return(S.base == S.top);
}

/*------------------------------------------------------------
操作目的: 得到栈的长度
初始条件: 栈S已存在
操作结果: 返回S中数据元素的个数
函数参数:
SqStack S 栈S
返回值:
int 数据元素的个数
------------------------------------------------------------*/
int StackLength(SqStack S)
{
assert((S.base != NULL) && (S.top != NULL));
return(S.top-S.base);
}

/*------------------------------------------------------------
操作目的: 得到栈顶元素
初始条件: 栈S已存在
操作结果: 用e返回栈顶元素
函数参数:
SqStack S 栈S
ElemType *e 栈顶元素的值
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool GetTop(SqStack S ElemType *e)
{
assert((S.base != NULL) && (S.top != NULL));
if(StackEmpty(S))
return false;

*e = *(S.top-1);
return true;
}

/*------------------------------------------------------------
操作目的: 遍历栈
初始条件: 栈S已存在
操作结果: 依次对S的每个元素调用函数fp
函数参数:
SqStack S 栈S
void (*fp)() 访问每个数据元素的函数指针
返回值:

------------------------------------------------------------*/
void StackTraverse(SqStack S void (*fp)(ElemType))
{
assert((S.base != NULL) && (S.top != NULL));
for(; S.basese++)
(*fp)(*S.base);
}

/*------------------------------------------------------------
操作目的: 压栈——插入元素e为新的栈顶元素
初始条件: 栈S已存在
操作结果: 插入数据元素e作为新的栈顶
函数参数:
SqStack *S 栈S
ElemType e 待插入的数据元素
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool Push(SqStack *S ElemType e)
{
if(S == NULL) return false;
assert((S->base != NULL) && (S->top != NULL));

// validate overflow
if(StackLength(*S) == S->stacksize)
{
El

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4331  2009-10-29 12:00  表达式求值\DynaSeqStack.cpp

     文件        881  2009-10-27 08:49  表达式求值\DynaSeqStack.h

     文件        147  2009-10-29 23:17  表达式求值\ElemType.cpp

     文件        267  2009-10-29 19:49  表达式求值\ElemType.h

     文件       3245  2009-10-30 10:49  表达式求值\Lab.cpp

     目录          0  2009-10-30 11:08  表达式求值

----------- ---------  ---------- -----  ----

                 8871                    6


评论

共有 条评论