实验4-10-1:栈(Stack) 修改如下程序(10.2节的栈示例)使它存储字符而不是整数。 增加 main 函数,用来要求用户输入一串圆括号或花括号,然后指出它们之间的嵌套是否正确。
输出范例:
Enter parentheses and/or braces: ()({})({})
Parentheses/braces are nested properly
Enter parentheses and/or braces: ((}
Parentheses/braces are NOT nested properly
/*
* 完成人 :谨慎谦虚
* 提交时间:2021-10-10, Sun, 10:35:52
* 系统评分:100
*/
#include <stdbool.h> /* C99 only */
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
/* external variables */
char contents[STACK_SIZE];
int top = 0;
void stack_overflow(void)
{
printf("Stack overflow\n");
exit(EXIT_FAILURE);
}
void stack_underflow(void)
{
printf("Stack underflow\n");
exit(EXIT_FAILURE);
}
void make_empty(void)
{
top = 0;
}
bool is_empty(void)
{
return top == 0;
}
bool is_full(void)
{
return top == STACK_SIZE;
}
void push(char ch)
{
if (is_full())
stack_overflow();
else
contents[top++] = ch;
}
char pop(void)
{
if (is_empty())
stack_underflow();
else
return contents[--top];
return '\0'; /* prevents compiler warning due to stack_underflow() call */
}
int main(void)
{
char ch,ch2;
int a[4]={0,0,0,0};
int judge=1;
make_empty();
printf("Enter parenteses and/or brance:");
while((ch=getchar())!='\n')
{
switch(ch)
{
case '(': ++a[0];break;
case ')': ++a[1];break;
case '{': ++a[2];break;
case '}': ++a[3];break;
}
if(ch=='('||ch=='{')
{
push(ch);
}
//judge match
if(ch==')')
{
ch2=contents[--top];//我用pop函数就icoding报错了,但VS和devcpp很正常。我不理解-_—
if(ch2!='(')
{
judge=0;
}
}
else if(ch=='}')
{
ch2 = contents[--top];
if(ch2!='{')
{
judge=0;
}
}
}
if(a[0]==a[1]&&a[2]==a[3]&&judge==1)
{
printf("Parentheses/braces are nested properly\n");
}
else
{
printf("Parentheses/braces are Not nested properly\n");
}
return 0;
}