#include <iostream>
#include <cstring>
#define M 100
using namespace std;
void stack_in_out(char str[],int len);
void func(char str[],int pstr,int len,char st[],int pst,char temp[],int pt);
int main()
{
char str[M];
cin>>str;
stack_in_out(str,strlen(str));
return 0;
}
void stack_in_out(char str[],int len)
{
char st[M];
int pst=0;
char temp[M];
int pt=0;
func(str,0,len,st,0,temp,0);
}
void func(char str[],int pstr,int len,char st[],int pst,char temp[],int pt)
{
if(pt==len)
{
temp[pt]=0;
puts(temp);
return;
}
if(pstr<len)
{
st[pst]=str[pstr];
func(str,pstr+1,len,st,pst+1,temp,pt);
}
if(pst>0)
{
//此处必须保存栈顶,因为后边出栈的操作会影响栈的内容,从而影响后续程序的执行结果
char ch=st[pst-1];;
temp[pt]=st[pst-1];
func(str,pstr,len,st,pst-1,temp,pt+1);
st[pst-1]=ch;
}
}
对于给定的字符串,求其入栈后,所有可能的出栈顺序
最新推荐文章于 2023-08-08 21:36:25 发布