帮我看下了兄弟们我调用了这个函数怎么不起作用啊??? 我是个菜鸟

无聊司马 2009-05-13 02:05:46
#include<iostream.h>
#define MAXSIZE 4
typedef struct
{
int data[MAXSIZE];
int len;
}SqList;

void merge(SqList a,SqList b,SqList &c)
{
int i=0,j=0,k=0;
while(i<a.len && j<b.len)
{
if(a.data[i]<b.data[j])
{
c.data[k]=a.data[i];
i++;k++;
}
else if(a.data[i]>b.data[j])
{
c.data[k]=b.data[j];
j++;k++;
}
else
{
c.data[k]=a.data[i];
i++;k++;
c.data[k]=b.data[j];
j++;k++;
}
}
while(i<a.len)
{
c.data[k]=a.data[i];
i++;k++;
}
while(j<b.len)
{
c.data[k]=b.data[j];
j++;k++;
}
c.len=k;
}
void displist(SqList c)
{
int k;
for(k=0;k<c.len;k++)
cout<<c.data[k]<<" ";
cout<<endl;
}


void main()
{
SqList a,b,c;
int i,j;
cout<<"输入数组a的值:"<<" ";
for(i=0;i<MAXSIZE;i++)
{
cin>>a.data[i];

}
cout<<"输入数组b的值:"<<" ";
for(j=0;j<MAXSIZE;j++)
{
cin>>b.data[j];
}
merge(a,b,c);
displist(c);
}


...全文
133 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2009-05-13
  • 打赏
  • 举报
回复
归并排序.
XU33149715 2009-05-13
  • 打赏
  • 举报
回复
while(i <a.len && j <b.len)
while(i <a.len)
while(j <b.len)
这三个while来控制程序的执行,但是你整个程序中就没有给a.len和b.len赋值,他们一直是负值,导致函数merge不执行,最后退出时k == 0,因此最后程序执行到displist()函数时,什么都没有做就退出了!
pengzhixi 2009-05-13
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAXSIZE 4
typedef struct
{
int data[MAXSIZE];
// int len;
}SqList;

void merge(SqList&a,SqList&b,SqList &c)
{
int i=0;
while(i <MAXSIZE)
{
if(a.data[i]<b.data[i])
{c.data[i]=a.data[i];}
else
{c.data[i]=b.data[i];}
++i;
}
}
void displist(SqList&c)
{
int k;
for(k=0;k <MAXSIZE;k++)
cout <<c.data[k] <<" ";
cout <<endl;
}


int main()
{
SqList a,b,c;
int i,j;
cout <<"输入数组a的值:" <<" ";
for(i=0;i <MAXSIZE;i++)
{
cin>>a.data[i];

}
cout <<"输入数组b的值:" <<" ";
for(j=0;j <MAXSIZE;j++)
{
cin>>b.data[j];
}
merge(a,b,c);
displist(c);
system("pause");
return 0;
}



给你改了下
pengzhixi 2009-05-13
  • 打赏
  • 举报
回复
你struct里面的len干啥用,如果用来记录数组的长度,那你又为何声明int data[MAXSIZE];
nuoshueihe 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nuoshueihe 的回复:]
C/C++ code#include <iostream.h>
#define MAXSIZE 4
typedef struct
{
int data[MAXSIZE];
int len;
}SqList;

int merge(SqList a,SqList b,SqList &c,int len1,int len2)
{
int i=0,j=0,k=0;

while(i <len1 && j <len2)
{
if(a.data[i] <b.data[j])
{
c.data[k]=a.data[i];
i++;k++;
}
else if(a.da…
[/Quote]
在没改变你逻辑的基础上 给你改了改 希望你自己找处错误
nuoshueihe 2009-05-13
  • 打赏
  • 举报
回复
#include <iostream.h> 
#define MAXSIZE 4
typedef struct
{
int data[MAXSIZE];
int len;
}SqList;

int merge(SqList a,SqList b,SqList &c,int len1,int len2)
{
int i=0,j=0,k=0;

while(i <len1 && j <len2)
{
if(a.data[i] <b.data[j])
{
c.data[k]=a.data[i];
i++;k++;
}
else if(a.data[i]>b.data[j])
{
c.data[k]=b.data[j];
j++;k++;
}
else
{
c.data[k]=a.data[i];
i++;k++;
c.data[k]=b.data[j];
j++;k++;
}
}
while(i <len1)
{
c.data[k]=a.data[i];
i++;k++;
}
while(j <len2)
{
c.data[k]=b.data[j];
j++;k++;
}

return k;
}
void displist(SqList c,int len3)
{
int k;
for(k=0;k <len3;k++)
cout <<c.data[k] <<" ";
cout <<endl;
}


void main()
{
SqList a,b,c;
int i,j;
cout <<"输入数组a的值:" <<" ";
for(i=0;i <MAXSIZE;i++)
{
cin>>a.data[i];

}

cout <<"输入数组b的值:" <<" ";
for(j=0;j <MAXSIZE;j++)
{
cin>>b.data[j];
}
int len3;
len3=merge(a,b,c,4,4);
cout<<len3<<endl;
displist(c,len3);
}

给你大致改了下
你SqList的len值根本无法得到
所以while不会执行,SqList c为空

二你的逻辑上还存在错误

goodname 2009-05-13
  • 打赏
  • 举报
回复
void merge(SqList &a,SqList &b,SqList &c)

void displist(SqList &c)

都是用引用,这样看看。

64,636

社区成员

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

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