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+
不应该在那里。