数据结构实验4

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

《数据结构》实验报告

实验序号:4 实验项目名称:栈的操作

}

改写以上程序,实现功能如下:

1)调用栈操作函数实现判别一个算术表达式中的圆括号配对是否正确。

2)改写Push和Pop函数,使得以上两个函数可以一次性将一个数组入栈和出栈。(1)

(2)

2.C/C++的库函数中已经实现了栈,实例如下:

#include //引入栈

using namespace std;

int main()

{

int a;

stacks;

scanf("%d",&a);

s.push(a); //入栈

printf("%d\n",s.top()); //取得栈顶元素输出

s.pop(); //出栈

return 0;

}

请根据以上程序,设计算法如下:

判别一个算术表达式中的圆括号和方括号配对是否正确。

四、分析与讨论

五、教师评语

成绩

签名:

日期:

附源程序清单:

1.

(1)

#include

#define MaxSize100

#define SUCCESS0

#define ERROR-1

typedef struct

{

int nData[MaxSize];

int nTop;

}SqStack;

void InitStack(SqStack*PST_List)//初始化栈

{

PST_List->nTop=-1;

}

int StackEmpty(SqStack*PST_List)//判断栈为空

{

if(PST_List->nTop==-1)

return ERROR;

else

return SUCCESS;

}

void Push(SqStack*PST_List,int nData)//元素进栈

{

if(PST_List->nTop==MaxSize-1)

{

printf("栈上溢出!\n");

}

else

{

PST_List->nTop++;//移动栈顶位置

PST_List->nData[PST_List->nTop]=nData;//元素进栈}

}

void Pop(SqStack*PST_List,int*pnData)//出栈

{

if(PST_List->nTop==-1)

{

printf("栈下溢出\n");

}

else

{

pnData=&PST_List->nData[PST_List->nTop];//元素出栈

PST_List->nTop--;//移动栈顶位置

}

}

int GetTop(SqStack*PST_List)//获取栈顶

{

if(!StackEmpty(PST_List))//先判断是否为空栈,不是空栈则返回栈顶{

return(PST_List->nData[PST_List->nTop]);

}

else

{

return ERROR;

}

}

int JudgeBrackets(SqStack*PST_List)//判断圆括号是否配对成功

{

char cData;//输入变量

int nSign=0;//判断标志

int*pnData=NULL;//传入pop中的参数

printf("请输入一个表达式:");

cData=getchar();

while(cData!='\n')//按下回车结束死循环

{

switch(cData)

{

case'('://对于左括号就入栈

{

Push(PST_List,(int)cData);

break;

}

case')':

{

if(GetTop(PST_List)=='(')//栈顶有左括号就出栈

{

Pop(PST_List,pnData);

}

else//否则就将判断标志置1

{

nSign=1;

}

break;

}

default://对于其他的输入不做操作

{

break;

}

}

cData=getchar();

}

if(GetTop(PST_List)=='(')//结束输入后判断栈顶是否还有左括号{

nSign=1;

}

if(nSign==1)

{

printf("圆括号配对不成功!\n");

}

else

{

printf("圆括号配对成功!\n");

}

return SUCCESS;

}

int main()

{

SqStack ST_List;

SqStack*PST_List=&ST_List;

//int nData;

//int nIndex;

InitStack(PST_List);

JudgeBrackets(PST_List);

/*for(nIndex = 1; nIndex < 10; ++nIndex)

{

相关文档
最新文档