① 用c语言如何实现判断圆括号是否配对
如果只有圆括号(没有[ ] 或 { }),不需要构造一个栈。因为用栈实现时,栈里装的都是一模一样的左括号 '(' ,因此我们只需定义一个 整型变量 来记录 栈中元素的个数 即可。具体代码如下:
#include <stdio.h>
int main (void)
{
char input = 0;
int num = 0; /* 不用栈,只记录栈中元素的个数,初始化为0 */
while (1 == scanf ("%c", &input)) /* 读入字符串,每次读一个字符存入 input 中 */
{
if ('(' == input)
{
++num; /* 相当于把左括号压栈 */
}
if (')' == input)
{
--num; /* 相当于遇到右括号时弹栈 */
}
if (0 > num)
{
printf ("括号不匹配\n");
return 0;
}
}
if (0 == num) /* 读完字符串后判断“栈”是否为空 */
{
printf ("括号匹配\n");
}
else
{
printf ("括号不匹配\n");
}
return 0;
}
② c语言判断一字符串左右括号是否匹配的问题!求助
由于没有分配空间,,,修改如下
#include
#include
#include
//
!!!分配内存头文件
#define
m
20
typedef
char
ElemType;
typedef
struct
{
ElemType
stack[m];
int
top;
}stacknode;
stacknode
*sp;
Init(stacknode
*st)
{
st->top=0;
return
0;
}
void
Push(stacknode
*st,ElemType
x)
{
if(st->top==m)
printf("The
stack
is
overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void
Pop(stacknode
*st)
{
st->top=st->top-1;
}
main()
{
char
s[m];
int
i;
printf("Creat
a
stack!\n");
sp
=
(stacknode
*)malloc(sizeof(stacknode));
//
!!!添加的语句
Init(sp);
printf("Input
a
expression:\n");
gets(s);
for(i=0;i
top==0)
printf("左右括号是匹配的!\n");
else
printf("左右括号是不匹配的!\n");
}