gpt4 book ai didi

c++ - 在 C++ 中使用堆栈(链表)将中缀转换为后缀

转载 作者:行者123 更新时间:2023-11-30 04:28:54 24 4
gpt4 key购买 nike

大家好!我是 C++ 的新手(这里也是 stackoverflow 的新手),我需要各位专家的帮助。即使没有错误或警告,这段代码也有问题。只要程序正在执行,它就会挂起。

该程序使用链表(堆栈)将中缀转换为后缀。

# include <iostream>
# include <cstring>

using namespace std;

struct node {
char data;
node *next;
};

node *top=NULL;
node *bottom=NULL;
node *entry;
node *last_entry;
node *second_last_entry;

void push(const char Symbol) {
entry=new node;
if(bottom==NULL) {
entry->data=Symbol;
entry->next=NULL;
bottom=entry;
top=entry;
}
else {
entry->data=Symbol;
entry->next=NULL;
top->next=entry;
top=entry;
}
}

const char pop( ) {
char Symbol=NULL;

if(bottom==NULL)
cout<<"\n\n\n\t *** Error : Stack is empty. \n"<<endl;

else {
for (last_entry=bottom; last_entry->next!=NULL; last_entry=last_entry->next)
second_last_entry=last_entry;

if(top==bottom)
bottom=NULL;

Symbol=top->data;

delete top;

top=second_last_entry;
top->next=NULL;
}

return Symbol;
}

void infix_to_postfix(const char *Infix) {
char Infix_expression[100]={NULL};
char Postfix_expression[100]={NULL};

strcpy(Infix_expression,"(");
strcat(Infix_expression,Infix);
strcat(Infix_expression,")");

char Symbol[5]={NULL};
char Temp[5]={NULL};

for(int count=0;count<strlen(Infix_expression);count++) {
Symbol[0]=Infix_expression[count];

if(Symbol[0]=='(')
push(Symbol[0]);

else if(Symbol[0]==')') {
Symbol[0]=pop( );

while(Symbol[0]!='(')
{
strcat(Postfix_expression,Symbol);

Symbol[0]=pop( );
}
}

else if(Symbol[0]=='^' || Symbol[0]=='*' || Symbol[0]=='/'
|| Symbol[0]=='+' || Symbol[0]=='-')
{
if(Symbol[0]=='*' || Symbol[0]=='/')
{
Temp[0]=pop( );

while(Temp[0]=='^' || Temp[0]=='*' || Temp[0]=='/')
{
strcat(Postfix_expression,Temp);

Temp[0]=pop( );
}

push(Temp[0]);
}

else if(Symbol[0]=='+' || Symbol[0]=='-')
{
Temp[0]=pop( );

while(Temp[0]!='(')
{
strcat(Postfix_expression,Temp);

Temp[0]=pop( );
}

push(Temp[0]);
}

push(Symbol[0]);
}

else
strcat(Postfix_expression,Symbol);
}

cout<<"\n\n Postfix Expression : "<<Postfix_expression;
}

int main( ) {
char Infix_expression[100]={NULL};
cout<<"\n\n Enter the Infix Expression : ";
cin>>Infix_expression;
infix_to_postfix(Infix_expression);
return 0;
}

请帮帮我!我是新手,没有你们我走不远。非常感谢!

最佳答案

我想您需要的帮助是学习如何使用该 IDE 调试代码。您可以尝试的第一件事是添加更多打印(通过 cout)以更清楚地查看发生了什么,并找到程序挂起的位置(或者它是否陷入无限循环)。

Here是一个教程,展示如何使用代码块进行调试。遗憾的是,我不知道这是否符合您的配置。

关于c++ - 在 C++ 中使用堆栈(链表)将中缀转换为后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758682/

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