C++ C++;理解问题-链表和堆栈
我必须编写一个代码,用堆栈和链表检查括号是否平衡。 这是我的代码,我使用了我班上的许多教程和power point演示文稿,也得到了我朋友的一点帮助。 但是,有人能逐行解释“int-pop”和“check”部分下发生了什么事情吗(我不理解将其作为注释部分)?理解C++的这一部分(实现的堆栈和LL列表)我遇到了问题,我没有任何人能够解释它,谁有时间。我试过很多东西,但我真的不明白。 P.S.代码正常工作 谢谢你们C++ C++;理解问题-链表和堆栈,c++,linked-list,stack,parentheses,C++,Linked List,Stack,Parentheses,我必须编写一个代码,用堆栈和链表检查括号是否平衡。 这是我的代码,我使用了我班上的许多教程和power point演示文稿,也得到了我朋友的一点帮助。 但是,有人能逐行解释“int-pop”和“check”部分下发生了什么事情吗(我不理解将其作为注释部分)?理解C++的这一部分(实现的堆栈和LL列表)我遇到了问题,我没有任何人能够解释它,谁有时间。我试过很多东西,但我真的不明白。 P.S.代码正常工作 谢谢你们 #include<iostream> #include <stri
#include<iostream>
#include <string>
using namespace std;
struct node
{
char data;
node *link;
};
int pop(node *&stack) //node that points to address of a stack?
{
char result;
node *top=new node; //how can i explain this?
top=stack; //why are we equalizing top with stack?
result=top->data;//i dont understand
stack=top->link;//dont understand
delete top;
return result;
}
bool Pairs(char openP,char closedP)
{
if(openP == '(' && closedP == ')') return true;
else if(openP == '{' && closedP == '}') return true;
else if(openP == '[' && closedP == ']') return true;
else return false;
}
bool Check(string exp)
{
int i=0;
node *stack=NULL;
while(exp[i])
{
if(exp[i]=='(' || exp[i]=='[')
{
node *neww=new stack;//dont understand
neww->data=exp[i];//dont understand
neww->link=stack; //-II-
stack=neww; //-II-
}
if(exp[i]==')' || exp[i]==']')
{
if(stack==NULL)
return 0;
else if (Pairs(pop(stack), exp[i])==0) //what does mean this part in parentheses?
return 0;
}
i++;
}
if(stack==NULL)
return 1;
else
return 0;
}
int main()
{
string exp;
cout<<"Enter parentheses:\n";
cin>>exp;
if(Check(exp)!=0)
cout<<"P. are balanced";
else
cout<<"P. are not balanced";
return 0;
}
#包括
#包括
使用名称空间std;
结构节点
{
字符数据;
节点*链接;
};
int pop(node*&stack)//指向堆栈地址的节点?
{
字符结果;
node*top=new node;//我如何解释这一点?
top=stack;//为什么我们要用stack均衡top?
result=top->data;//我不明白
stack=top->link;//不明白
删除顶部;
返回结果;
}
布尔对(char openP、char closedP)
{
if(openP=='('&&closedP==')')返回true;
else if(openP='{'&&closedP='}')返回true;
else if(openP=='['&&closedP==']')返回true;
否则返回false;
}
布尔检查(字符串扩展)
{
int i=0;
node*stack=NULL;
while(exp[i])
{
如果(exp[i]=='('| exp[i]=='[')
{
node*neww=newstack;//不理解
neww->data=exp[i];//不明白
neww->link=stack;//-II-
stack=neww;/-II-
}
如果(exp[i]=')'| | exp[i]=']')
{
if(stack==NULL)
返回0;
else if(Pairs(pop(stack),exp[i])==0)//括号中的这部分是什么意思?
返回0;
}
i++;
}
if(stack==NULL)
返回1;
其他的
返回0;
}
int main()
{
字符串表达式;
coutexp;
如果(检查(经验)!=0)
cout我建议采用以下方法:
>P>考虑你的算法忽略语言细节。一个堆栈是正确的方法,但是你不需要考虑如何实现你的堆栈,直到你想到算法。
>P>决定了你需要一个给定的数据结构,问问你自己是否已经在C++中存在(STD::Stand),然后自己发明。
< >使用C++的成语而不是C的成语(即使用迭代器开始)和(和)(不)索引,这将阻止你的EXP[i] bug.< /p>
- 不要让一个类做一件以上的事情。如果你需要一个堆栈,那么就创建一个堆栈类,而不是让你的解析类参与堆栈实现。首先,这样可以更容易地考虑检查算法,其次,堆栈类可以在其他地方重用
在大纲中,您的解决方案将使用迭代器检查字符串的字符,并使用
std::stack。任何地方都不需要新的或指针。使用调试器并一步一步地执行它……我建议您阅读有关指针和结构/类的内容,这样您就会了解更多的内容。不要因为从其他地方获得代码就认为它是正确的。您是正确的我不想对这段代码产生怀疑。我在谷歌上搜索了更多,找到了一些解释,我知道如何使用bool Pairs和bool CheckIfBalanced来解决这项任务,但我仍然不清楚:有没有其他方法可以解决它?正如我所说,我们必须使用节点、链表和堆栈:我不理解你的评论:“我们必须使用节点、链表和堆栈…”。您的任务是检查平衡括号还是使用各种不必要的数据结构?