C语言用栈写一个判断输入的表达式的括号是否正确的算法?
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/08/18 04:42:16
C语言用栈写一个判断输入的表达式的括号是否正确的算法?
表达式中包含两种括号,圆括号和方括号.会的朋友帮忙写下.
二楼的哥们,栈是老师要求的,原来根本没学过如何实用栈
表达式中包含两种括号,圆括号和方括号.会的朋友帮忙写下.
二楼的哥们,栈是老师要求的,原来根本没学过如何实用栈
![C语言用栈写一个判断输入的表达式的括号是否正确的算法?](/uploads/image/z/6082667-35-7.jpg?t=C%E8%AF%AD%E8%A8%80%E7%94%A8%E6%A0%88%E5%86%99%E4%B8%80%E4%B8%AA%E5%88%A4%E6%96%AD%E8%BE%93%E5%85%A5%E7%9A%84%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E6%8B%AC%E5%8F%B7%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%E7%9A%84%E7%AE%97%E6%B3%95%3F)
//---------------------------------------------------------------------------
#include
#include
#define MEM_ERR "malloc() error!"
#define EMPTY_ERR "stack is empty!"
typedef struct node{
char oper;
struct node *next;
}node;
typedef struct{
node *head;
unsigned int size;
}stack;
void error_exit(const char *msg)
{
fprintf(stderr,"%s\n",msg);
exit(-1);
}
int isempty(stack *stk)
{
return stk->size?0:1;
}
stack *init(void)
{
stack *rt=(stack*)malloc(sizeof(stack));
if (rt==NULL) error_exit(MEM_ERR);
rt->head=NULL;
rt->size=0;
return rt;
}
void push(stack *stk,char op)
{
node *tp=(node*)malloc(sizeof(node));
if (tp==NULL) error_exit(MEM_ERR);
tp->oper=op;
tp->next=stk->head;
stk->head=tp;
++stk->size;
}
char pop(stack *stk)
{
char op;
node *tmp;
if (isempty(stk)) {
error_exit(EMPTY_ERR);
}
op=stk->head->oper;
tmp=stk->head;
stk->head=tmp->next;
--stk->size;
free(tmp);
return op;
}
char top(stack *stk)
{
if (isempty(stk)) {
error_exit(EMPTY_ERR);
}
return stk->head->oper;
}
void del_stk(stack *stk)
{
node *t;
while (stk->head)
{
t=stk->head;
stk->head=t->next;
free(t);
}
free(stk);
}
int islr(const char a)
{
return a=='('||a=='['||a=='{';
}
int isrr(const char a)
{
return a==')'||a==']'||a=='}';
}
int match(const char a,const char b)
{
int t;
switch (a) {
case '(':t=b==')';break;
case '[':t=b==']';break;
case '{':t=b=='}';break;
}
return t;
}
int main(int argc,char* argv[])
{
char a;
stack *stk=init();
while ((a=getchar())!='\n')
{
if (islr(a)) {
push(stk,a);
}
else if (isrr(a)) {
if (!isempty(stk)&&match(top(stk),a)) pop(stk);
else break;
}
}
if (!isempty(stk)) {
printf("Unmatched!\n");
del_stk(stk);
}
else printf("Matched!\n");
return 0;
}
//---------------------------------------------------------------------------
#include
#include
#define MEM_ERR "malloc() error!"
#define EMPTY_ERR "stack is empty!"
typedef struct node{
char oper;
struct node *next;
}node;
typedef struct{
node *head;
unsigned int size;
}stack;
void error_exit(const char *msg)
{
fprintf(stderr,"%s\n",msg);
exit(-1);
}
int isempty(stack *stk)
{
return stk->size?0:1;
}
stack *init(void)
{
stack *rt=(stack*)malloc(sizeof(stack));
if (rt==NULL) error_exit(MEM_ERR);
rt->head=NULL;
rt->size=0;
return rt;
}
void push(stack *stk,char op)
{
node *tp=(node*)malloc(sizeof(node));
if (tp==NULL) error_exit(MEM_ERR);
tp->oper=op;
tp->next=stk->head;
stk->head=tp;
++stk->size;
}
char pop(stack *stk)
{
char op;
node *tmp;
if (isempty(stk)) {
error_exit(EMPTY_ERR);
}
op=stk->head->oper;
tmp=stk->head;
stk->head=tmp->next;
--stk->size;
free(tmp);
return op;
}
char top(stack *stk)
{
if (isempty(stk)) {
error_exit(EMPTY_ERR);
}
return stk->head->oper;
}
void del_stk(stack *stk)
{
node *t;
while (stk->head)
{
t=stk->head;
stk->head=t->next;
free(t);
}
free(stk);
}
int islr(const char a)
{
return a=='('||a=='['||a=='{';
}
int isrr(const char a)
{
return a==')'||a==']'||a=='}';
}
int match(const char a,const char b)
{
int t;
switch (a) {
case '(':t=b==')';break;
case '[':t=b==']';break;
case '{':t=b=='}';break;
}
return t;
}
int main(int argc,char* argv[])
{
char a;
stack *stk=init();
while ((a=getchar())!='\n')
{
if (islr(a)) {
push(stk,a);
}
else if (isrr(a)) {
if (!isempty(stk)&&match(top(stk),a)) pop(stk);
else break;
}
}
if (!isempty(stk)) {
printf("Unmatched!\n");
del_stk(stk);
}
else printf("Matched!\n");
return 0;
}
//---------------------------------------------------------------------------
C语言用栈写一个判断输入的表达式的括号是否正确的算法?
编写一个表达式中括号是否正确配对的算法
试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.
编写一个判断算术表达式中开括号闭括号是否配对的算法
判断c语言表达式是否正确
完成一个 C算法,输入一算术表达式能够编程计算其中括号 “(”和“)”;“[”和“]”;“{”和“}”的匹配
c语言判断表达式是否等价的题目怎么做
给出一行C语言表达式,判断给定的整数是否是一个2的幂
C语言编程 判断输入的一个数是否是5的倍数
C语言里如何判断输入的一个数是否是整数?
用栈来判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对.编写并实现它的算法.
输入一行表达式,判断该表达式中的括号是否匹配.括号要求符合C++表达式的要求.若左括号与右括号匹配,则