C++ C++;理解问题-链表和堆栈

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

我必须编写一个代码,用堆栈和链表检查括号是否平衡。 这是我的代码,我使用了我班上的许多教程和power point演示文稿,也得到了我朋友的一点帮助。 但是,有人能逐行解释“int-pop”和“check”部分下发生了什么事情吗(我不理解将其作为注释部分)?理解C++的这一部分(实现的堆栈和LL列表)我遇到了问题,我没有任何人能够解释它,谁有时间。我试过很多东西,但我真的不明白。 P.S.代码正常工作 谢谢你们

#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来解决这项任务,但我仍然不清楚:有没有其他方法可以解决它?正如我所说,我们必须使用节点、链表和堆栈:我不理解你的评论:“我们必须使用节点、链表和堆栈…”。您的任务是检查平衡括号还是使用各种不必要的数据结构?