C++ 使用链接查找数组中的最大值
伙计们,以下代码由于运行时错误而停止工作C++ 使用链接查找数组中的最大值,c++,linked-list,C++,Linked List,伙计们,以下代码由于运行时错误而停止工作 #include<iostream> using namespace std; struct node { int item; node *l; node *r; node(int x) { item=x; l=0;r=0; } }; typedef node *link; link Max(int a[],int l,int n) { int m=l+(l+n)/2; link x=new
#include<iostream>
using namespace std;
struct node
{
int item;
node *l;
node *r;
node(int x)
{
item=x; l=0;r=0;
}
};
typedef node *link;
link Max(int a[],int l,int n)
{
int m=l+(l+n)/2;
link x=new node(a[m]);
if(l==n) return x;
x->l=Max(a,l,m);
x->r=Max(a,m+1,n);
int u=x->l->item;
int v=x->r->item;
if(u>v) x->item=u;
else x->item=v;
return x;
}
int main(){
link y;
int a[]={12,3,5,4,7,6,20,11,10,9};
int n=sizeof(a)/sizeof(a[0]);
y=Max(a,0,n-1);
cout<<y->item<<endl;
return 0;
}
#包括
使用名称空间std;
结构节点
{
国际项目;
节点*l;
节点*r;
节点(int x)
{
项目=x;l=0;r=0;
}
};
typedef节点*链接;
链接最大值(整数a[],整数l,整数n)
{
int m=l+(l+n)/2;
链路x=新节点(a[m]);
如果(l==n)返回x;
x->l=最大值(a,l,m);
x->r=Max(a,m+1,n);
int u=x->l->物料;
INTV=x->r->项目;
如果(u>v)x->item=u;
否则x->item=v;
返回x;
}
int main(){
链接y;
int a[]={12,3,5,4,7,6,20,11,10,9};
int n=sizeof(a)/sizeof(a[0]);
y=最大值(a,0,n-1);
cout代码给了我一个堆栈溢出异常。您对变量m
的计算已关闭:它可能类似于int m=l+(n-l)/2;
,这将为剩余元素的一半提供从l的偏移量。您当前的实现给出的“中点”值超出范围[l,n]因此,函数无限期地递归当您运行它时会发生什么?它打开窗口并写入异常,运行时错误您是否尝试在调试器中运行它?您确定您对m
的定义是您想要的吗?我想第一个l+
不应该在那里。