gpt4 book ai didi

c - 堆栈实现有问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:23 25 4
gpt4 key购买 nike

全面披露:这是一项作业。我不是在寻找明确的答案,而是在寻找一些指导。

我很难用 C 语言初始化我的堆栈。具体来说,我似乎无法让它正确地将新元素压入堆栈。我知道我的 push/pop/etc 功能是正确的(它们已提供),但我担心我没有正确看待它。

这是读取字符串并确定它是否“平衡”的基本尝试(所有圆括号、花括号和方括号都有搭档并以正确的顺序出现。)据我所知,它不是我的逻辑有问题,我相信语法是正确的,所以我有点不知所措......

这是我的尝试:

int isBalanced(char* s) {

struct DynArr *string;
string = newDynArr(50);

while (nextChar(s) != '\0') {
if ((nextChar(s) == '(') || (nextChar(s) == '{') || (nextChar(s) == '[')) {
pushDynArr(string, nextChar(s));
}
if (nextChar(s) == ')') {
if (topDynArr(string) != '(') {
return 0;
} else popDynArr(string);
}
if (nextChar(s) == '}') {
if (topDynArr(string) != '{') {
return 0;
} else popDynArr(string);
}
if (nextChar(s) == ']') {
if (topDynArr(string) != '[') {
return 0;
} else popDynArr(string);
}
}

if (isEmptyDynArr(string)) {
printf("The stack is empty\n");
return 1;
} else return 0;
}

输出总是打印“堆栈为空”并返回 true,尽管我给了它不平衡的字符串。我可能已经看这个太久了,无法识别显而易见的东西。如果您能提供任何帮助,我将不胜感激。我不需要明确的答案,但朝着正确的方向插入就足够了。

编辑:这里是请求的函数...

int isEmptyDynArr(DynArr *v) 
{
if(v->size == 0) {
return 1;
}
else return 0;
}

DynArr* newDynArr(int cap)
{
assert(cap > 0);
DynArr *r = (DynArr *)malloc(sizeof( DynArr));
assert(r != 0);
initDynArr(r,cap);
return r;
}

void pushDynArr(DynArr *v, TYPE val)
{
assert(v != 0);
addDynArr(v, val);
}

void popDynArr(DynArr *v)
{
assert(v != 0);
assert(isEmptyDynArr(v) == 0);
v->size--;
}

TYPE topDynArr(DynArr *v)
{
assert(v != 0);
assert(isEmptyDynArr(v) == 0);
return v->data[v->size - 1];
}

char nextChar(char* s)
{
static int i = -1;
char c;
++i;
c = *(s+i);
if ( c == '\0' )
return '\0';
else
return c;
}

最佳答案

此行可能会从输入行中跳过 1 或 2 或 3 个字符:

nextChar(s) == '(') || (nextChar(s) == '{') || (nextChar(s) == '['

你绝对应该使用:

char ch = nextChar(s);
if( ch == '(' || ch == '{' || c == '[' )

关于c - 堆栈实现有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com