标题:数据结构顺序表问题 对两个单词进行比较 我这个运行结果怎么都是A=B
只看楼主
vermouthg
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-3-22
结帖率:0
已结贴  问题点数:20 回复次数:3 
数据结构顺序表问题 对两个单词进行比较 我这个运行结果怎么都是A=B
#include "string.h"
#include"iostream"
using namespace std;
typedef char ElemType;    //定义一个 char 类型的别名

#define LIST_INIT_SIZE 80    // 线性表存储空间的初始分配量 (默认值)
#define LISTINCREMENT 10    // 线性表存储空间的分配增量(默认值)

///////////////......抽象类型定义......./////////////////
typedef struct {
ElemType *elem; // 存储空间基址
int length; // 当前长度
ElemType data[]; // 定义当前元素
//    int listsize; // 当前分配的存储容量 (以ElemType为单位)
//    int incrementsize; //约定的增补空间量(以ElemType为单位)
} SqList; // 俗称 顺序表

///////////////......顺序表操作........./////////////////

////.......比较A,B的大小.......///////
int compare(SqList &A, SqList &B)
{
int j = 0;
while (j < A.length && j < B.length)
{
if (A.elem[j] < B.elem[j]) return(-1);
else if (A.elem[j] > B.elem[j]) return (1);
else j++;
}
if (A.length == B.length) return (0);
else if (A.length < B.length) return(-1);
else return(1);
}

////.........初始化顺序表.........///////
// 构造一个最大容量为 maxsize 的顺0表 L
void InitList_Sq(SqList &L, int maxsize = LIST_INIT_SIZE)
{
L.elem = new ElemType[maxsize];    // 为顺序表分配一个最大容量为 maxsize 的数组空间
L.length = 0;    // 顺序表中当前所含元素个数为 0
} // InitList_Sq

////.........释放顺序表 L 所占存储空间.........///////
void DestroyList_Sq(SqList &L)
{
delete[] L.elem;
L.length = 0;
}// DestroyList_Sq

////.........形成新的顺序表........../////
void CreatList(SqList &L)
{
char word[20];
gets_s(word);
for (int i = 0; i<strlen(word); i++)
{
L.data[i] = word[i]; //在结构体中定义一个当前的元素 通过循环字符数组
}

}

#include "iostream"
#include "process.h"
#include "SQList.h"
using namespace std;

void main( )
{
SqList LA, LB;

char Input='t';
while (Input!='0')
{
cout<<endl<<"输入单词A: ";
CreatList(LA);    //生成顺序表

cout<<endl<<"输入单词B: ";
CreatList(LB);

int j;
j=compare(LA,LB);    //两个字符串进行比较

if (j==0)
cout<<"A=B: "<<endl;    //若A==B,则A和B为同一个单词
else if(j==-1)
cout<<"A<B "<<endl;    //若A<B,则A在B之前
else if(j==1)
cout<<"A>B "<<endl;    //若A>B,则A在B之后
cout<<endl<<"THE END"<<endl;

DestroyList_Sq(LA);
DestroyList_Sq(LB);
cout<<endl<<"Do you compare continue? (Input='0' NO; Input!='0' YES)"<<endl;
cin>>Input;
}
}
搜索更多相关主题的帖子: include 线性表 单词 空间 元素 
2017-03-22 00:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
你的代码一塌糊涂,尤其是 elem 和 data 的关系

CreatList中data是0长度,你越界范围了
compare中使用了未赋值的elem和length
2017-03-22 08:30
vermouthg
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-3-22
得分:0 
回复 2楼 rjsp
那个代码只有compare函数是我自己填的,其他的都是老师写的,我还是刚刚学数据结构,所以不懂
那个compare函数里头要给elem和length赋值怎么赋啊
2017-03-22 12:37
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:10 
回复 3楼 vermouthg
你的createlist里面没有更新length的值。比较的时候访问到的length仍然是0
2017-03-22 13:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475351-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.134015 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved