二路算法的问题 高手请进

来源:百度知道 编辑:UC知道 时间:2024/05/02 08:54:00
#include<iostream>
#include<string>
using namespace std;
#define MAXSIZE 20
typedef int KeyType;
typedef struct{
KeyType key;
string otherinfo;
}RedType;
typedef struct{
RedType r[MAXSIZE+1];
int length;
}SqList;//排序的列表
typedef struct {
RedType *base;
int front;
int rear;
} SqQueue;//循环链表
int newList(SqList& L)//建立以各排序的链表
{ int a;
cout<<"只能长度小于20的"<<endl;
cout<<"请输入长度"<<endl;
cin>>a;
L.length =a;
for(int i=1; i<=L.length;i++)
{
cout<<"输入第"<<i<<"个关键项和其他数据"<<"中间用空格隔开"<<endl;
cin>>L.r[i].key>>L.r[i].otherinfo;
}
return 0;
}
void erlu(SqList& L)//二路排序的函数 不知为什么通不过 调试了N次
{
int i;
SqQueue Q;
Q.base=(RedType*)malloc(L.length *sizeof(R

大概调试了一下,函数newList中:
for(int i=1; i<=L.length;i++)
有问题,因为这样对L初始化的话,L[0]就始终是未初始化状态,而你后面的代码中,有这么一段:
Q.front =Q.rear =0;
for(i=2;i<=L.length ;++i)
{
if( L.r[Q.front ].key<Q.base [0].key )
{
……
很显然,这里的 L.r[Q.front ].key相当于L.r[0].key,由于L.r[0]根本没有被初始化,因此直接导致程序崩溃。

关于2路排序的算法,我没有细看,程序出错的问题应该就是这里变量初始化的问题了。

另外,Q.base=(RedType*)malloc(L.length *sizeof(RedType)); 后面一定要free,动态分配的空间别忘了释放,切记。