求合法栈序列的代码找错....

小村长 2011-05-14 10:43:17
Description
给定两个整数序列a,b,判断b是否为a的一个合法出栈序列。
Input
​多组测试实例,
每组占三行,第一行为一个整数n(n<=20),表示序列长度。第二行为序列a,第三行为序列b。每个序列中的n个数两两不同。输入以文件终止符结束。
Output
若b是a的一个合法出栈序列,则输出yes,否则输出no。每组输出占一行。
我的代码::
#include <iostream>
using namespace std;
const int maxsize=20;
typedef struct stack{
int data[maxsize];
stack(){top=-1;}
int top;
};
int hf(int a[],int b[], int n)
{
stack s;
int c[n];
int i=0;
int j=0;
int m=1;
while(i<n){
if(a[i]!=b[j]){
s.top=s.top+1;
s.data[s.top]=a[i];
i=i+1;
}
else{
c[j]=a[i];
i=i+1;
j=j+1;
}
}
while(s.top!=-1){
c[j]=s.data[s.top];
s.top=s.top-1;
j=j+1;
}
for(i=0;i<n && m!=0;i++){
if(c[i]!=b[i])
m=0;}
return m;
}
int main()
{
int n;
int m;
int a[maxsize];
int b[maxsize];
while(cin>>n){
int i;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
cin>>b[i];
m=hf(a,b,n);
if(m==0)cout<<"no"<<endl;
else cout<<"yes"<<endl;
}
return 0;
}




...全文
65 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-05-15
  • 打赏
  • 举报
回复
初始化:src[j=0]入栈.

目标序列:obj,源序列:src。

循环:判断obj[i]是否等于top,等于则出栈,++i. 不等于或者top空则压入src[j].

特殊情况:obj扫描结束而栈非空,表明obj不可能产生。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧