实验3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

栈的应用

1.实验目的:掌握栈的基本结构和操作方法,并能利用其解决实际问题。

2.实验内容:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意,即([]())或[([][])]等都为正确的格式,而[(])为不正确的格式。利用栈编程序检验表达式中的括号是否合法。

3.提示:

(1)先实现栈的基本操作:初始化,入栈,出栈等。

(2)每读入一个括号,若是右括号,则或者是置于栈顶的左括号得以消解,或者是不合法的情况;若是左括号,则直接入栈。

(3)用顺序栈实现。

-----

代码

//---code.h

#define TRUE 1

#define FALSE 0

#define ok 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define NULL 0

typedef int Status;

///---顺序栈test.cpp

#include "code.h"

#include //#include

#include

#include

#include

#define STACK_SIZE 100 /* 栈初始向量大小*/

#define STACKINCREMENT 10

typedef char ElemType ;

typedef struct sqstack

{

ElemType *base; /* 栈不存在时值为NULL */

ElemType *top; /* 栈顶指针*/

int stacksize ; /* 当前已分配空间,以元素为单位*/

}SqStack ;

Status InitStack(SqStack &s)

{

// ElemType *a=(ElemType *)malloc(10*sizeof(ElemType));

//realloc(a,STACK_SIZE *sizeof(ElemType));

s.base=(ElemType *)malloc(STACK_SIZE *sizeof(ElemType));

if (! s.base) return ERROR;

s.top=s.base ; /* 栈空时栈顶和栈底指针相同*/

s.stacksize=STACK_SIZE;

return ok ;

}

Status push(SqStack &S,ElemType e)

{

if (S.top-S.base>=S.stacksize)

{

return ERROR;

}

*S.top=e;

S.top++ ; /* 栈顶指针加1,e成为新的栈顶*/

return ok;

}

Status pop( SqStack &S, ElemType &e )

{

if ( S.top== S.base )

return ERROR ; /* 栈空,返回失败标志*/ S.top-- ;

e=*S.top ;

return ok ;

}

int stackLength( SqStack S )

{

return S.top-S.base ;

}

Status StackEmpty( SqStack &S)

{

if ( S.top== S.base )

return TRUE;

else

return FALSE;

}

void static main()

{

char ch ,x ;

SqStack S;

InitStack(S);

scanf("%c", &ch) ;

while((int)ch!=10)//enter回车的ASC为10 {

if ((ch=='(')||(ch=='['))

push(S, ch) ;

else if (ch==']')

{

pop(S,x) ;

if (x!='[')

{

printf("'['括号不匹配") ;

return ;

}

}

else if (ch==')')

{

pop(S,x) ;

if (x!='(')

{

printf("'('括号不匹配") ;

return ;

}

}

scanf("%c", &ch) ;

}

if (!StackEmpty(S))

{

printf("括号数量不匹配!") ;

return ;

}

else

printf("括号数量匹配成功!") ;

}

相关文档
最新文档