数据结构栈的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验报告
实验序号:4 实验项目名称:栈的操作
}
改写以上程序,实现功能如下:
调用栈操作函数实现判别一个算术表达式中的圆括号和方括号配对是否正确匹配。
2.C/C++的库函数中已经实现了栈,实例如下:
#include
using namespace std;
int main()
{
int a;
stack
scanf("%d",&a);
s.push(a); //入栈
printf("%d\n",s.top()); //取得栈顶元素输出
s.pop(); //出栈
return 0;
}
请根据以上程序,设计算法如下:
判别一个算术表达式中的圆括号配对是否正确。
四、分析与讨论
1.
2.
对上机实践结果进行分析,上机的心得体会。
五、教师评语
成绩
签名:
日期:
附源程序清单:
1.
#include
#define MaxSize 100
using namespace std;
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack *st) //初始化栈
{
st->top=-1;
}
int StackEmpty(SqStack *st) //判断栈为空
{
return (st->top==-1);
}
void Push(SqStack *st,ElemType x) //元素进栈
{
if(st->top==MaxSize-1)
{
printf("栈上溢出!\n");
}
else
{
st->top++; //移动栈顶位置
st->data[st->top]=x; //元素进栈
}
}
void Pop(SqStack *st,ElemType *e) //出栈
{
if(st->top==-1)
{
printf("栈下溢出\n");
}
else
{
*e=st->data[st->top]; //元素出栈
st->top--; //移动栈顶位置
}
}
int main()
{
SqStack L;
SqStack *st=&L;
ElemType e,a[MaxSize];
int i,j=1,k;
do{
InitStack(st);
gets(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]=='('||a[i]=='{'||a[i]=='[') //左括号入栈Push(st,a[i]);
if(a[i]==')')
{
if(StackEmpty(st) ==1)//判断栈是否为空
{
printf("多了“(”,不匹配\n");
break;
}
else
if('('==st->data [st->top ])//匹配成功出栈
Pop(st,&e);
else
{
printf("%c不匹配\n",a[i]);
break;
}
}
if(a[i]=='}')
{
if(StackEmpty(st) ==1)//判断栈是否为空
{
printf("多了“}”,不匹配\n");
break;
}
else
if('{'==st->data [st->top ])//匹配成功出栈
Pop(st,&e);
else
{
printf("%c不匹配\n",a[i]);
break;
}
}
if(a[i]==']')
{
if(StackEmpty(st) ==1) //判断栈是否为空
{
printf("多了“]”,不匹配\n");
break;
}
else
if('['==st->data [st->top ])//匹配成功出栈
Pop(st,&e);
else
{
printf("%c不匹配\n",a[i]);
break;
}
}
}
if(st->top ==-1)
printf("匹配成功\n");
else
printf("匹配不成功,多了%c。\n",st->data [st->top ]);
printf("是否继续匹配括号:(继续不要按“#”)\n");
scanf("%c",&e);
k=getchar();//这是为了输入e时会敲回车键而加上去的
}while(e!='#');
}
2.(1)
#include
using namespace std;
int main()
{
int a,i;
char b[50];
stack
gets(b);
for(i=0;b[i]!='\0';i++)
{
if(b[i]=='('||b[i]=='[')
{
s.push(b[i]);
}//如果为"("或者是"[",就入栈
if(b[i]==')')
{
if(s.empty()==1 )//s.empty是判断函数,若无栈顶元素就会返回1,表明栈为空,否则就会返回0
{
printf("不匹配\n");
break;
}
if(s.top()=='(')//判断是否符合出栈的条件
{
s.pop() ;//匹配就会出栈
}
else
{
printf("不匹配\n");
break;
}
}
if(b[i]==']')
{