-
大小: 4KB文件類型: .rar金幣: 1下載: 0 次發(fā)布日期: 2021-06-08
- 語言: C/C++
- 標簽: 數(shù)據(jù)結構??
資源簡介
c++ 的 算術表達式求值 數(shù)據(jù)結構課程設計里的一個題 給一個完整的表達式 可以帶括號 求值當用戶輸入一個合法的算術表達式后,能夠返回正確的結果。能夠計算的運算符包括:加、減、乘、除、括號;能夠計算的操作數(shù)要求在實數(shù)范圍內;對于異常表達式能給出錯誤提示。
代碼片段和文件信息
/***
*DynaSeqStack.cpp?-?動態(tài)順序棧,即棧的動態(tài)順序存儲實現(xiàn)
*
*
*題目:表達式求值
*
*班級:A1?北極
*
*姓名:邱繼穎
*
*學號:2008010829
*
****/
#include?
#include?
#include?
#include?
#include?“DynaSeqStack.h“
const?int?STACK_INIT_SIZE?=?100; //?初始分配的長度
const?int?STACKINCREMENT??=?10; //?分配內存的增量
/*------------------------------------------------------------
操作目的: 初始化棧
初始條件: 無
操作結果: 構造一個空的棧
函數(shù)參數(shù):
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
函數(shù)參數(shù):
SqStack?*S 待銷毀的棧
返回值:
無
------------------------------------------------------------*/
void?DestroyStack(SqStack?*S)
{
assert(S?!=?NULL);
free(S->base);
S->top?=?S->base?=?NULL;
}
/*------------------------------------------------------------
操作目的: 判斷棧是否為空
初始條件: 棧S已存在
操作結果: 若S為空棧,則返回true,否則返回false
函數(shù)參數(shù):
SqStack?S 待判斷的棧
返回值:
bool 是否為空
------------------------------------------------------------*/
bool?StackEmpty(SqStack?S)
{
assert((S.base?!=?NULL)?&&?(S.top?!=?NULL));
return(S.base?==?S.top);
}
/*------------------------------------------------------------
操作目的: 得到棧的長度
初始條件: 棧S已存在
操作結果: 返回S中數(shù)據(jù)元素的個數(shù)
函數(shù)參數(shù):
SqStack?S 棧S
返回值:
int 數(shù)據(jù)元素的個數(shù)
------------------------------------------------------------*/
int?StackLength(SqStack?S)
{
assert((S.base?!=?NULL)?&&?(S.top?!=?NULL));
return(S.top-S.base);
}
/*------------------------------------------------------------
操作目的: 得到棧頂元素
初始條件: 棧S已存在
操作結果: 用e返回棧頂元素
函數(shù)參數(shù):
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的每個元素調用函數(shù)fp
函數(shù)參數(shù):
SqStack?S 棧S
void?(*fp)() 訪問每個數(shù)據(jù)元素的函數(shù)指針
返回值:
無
------------------------------------------------------------*/
void?StackTraverse(SqStack?S?void?(*fp)(ElemType))
{
assert((S.base?!=?NULL)?&&?(S.top?!=?NULL));
for(;?S.basese++)
(*fp)(*S.base);
}
/*------------------------------------------------------------
操作目的: 壓棧——插入元素e為新的棧頂元素
初始條件: 棧S已存在
操作結果: 插入數(shù)據(jù)元素e作為新的棧頂
函數(shù)參數(shù):
SqStack?*S 棧S
ElemType?e 待插入的數(shù)據(jù)元素
返回值:
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
評論
共有 條評論