C语言的求两个集合的合并运算—新手求dalao解答疑问

Reimu__Hakurei 2018-05-08 01:14:16
程序我做出来,但是结果是一堆乱的数据,请问哪里错了。
#include<stdio.h>
#define OK 1;
#define ERROR 0;
#define TRUE 1;
#define FALSE 0;
#define MAXSIZE 50 /* 存储空间初始分配量 */
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE]; /* 数组,存储数据元素 */
int length; /* 表当前有效长度 */
}SqList;
struct LNode /* 结点定义 */
{
ElemType data;
struct LNode *next;
};
int ListLength(SqList L);
void ListInsert(SqList *L,int i,ElemType e) ;
void GetElem(SqList L,int i,ElemType *e);
Status LocateElem(SqList L, ElemType e);
Status ListEmpty(SqList L);
void Union(SqList *La,SqList Lb);

int main(void)
{
SqList La,Lb;
int i;
char ch;
printf("请输入集合1的元素:");
i = 0;
ch=0;
while (ch!= '\n')
{
scanf("%d", &La.data[i]);
ch=getchar();
}
printf("请输入集合2的元素:");
i = 0;
ch=0;
while (ch!= '\n')
{
scanf("%d", &Lb.data[i]);
ch=getchar();
}
Union(&La,Lb);
printf("集合合并后的所有元素:");
for (i = 0; i < La.length; i++)
{
printf("%d ", La.data[i]);
}
return 0;
}

void Union(SqList *La,SqList Lb)
{ /* 将所有在表Lb中但不在La中的数据元素插入到La中 */
ElemType e;
int La_len,Lb_len;
int i;
La_len = ListLength(*La); /* 求表La的长度 */
Lb_len = ListLength(Lb);
for(i = 1; i <= Lb_len; i++)
{
GetElem(Lb, i, &e); /* 取Lb中第i个数据元素赋给e */
if(LocateElem(*La, e)!=1)/* La中不存在和e相同的元素,则插入之 */
{
ListInsert(La, ++La_len, e);
}
}
}
int ListLength(SqList L)
{/* 初始条件:表L已存在。*/
/* 操作结果:返回L中数据元素个数。*/
int i;
i=0;
while(L.data[i]!=0)
{
i++;
}
return i;
}

Status LocateElem(SqList L, ElemType e)
{
int i = 0;

for (i = 0; i < L.length ; i++)
{
if (e ==L.data[i])
{
return TRUE;
}
}
return ERROR;
}

void ListInsert(SqList *L, int i, ElemType e)
{
L->data[i - 1] = e;
L->length++;
}

void GetElem(SqList L,int i,ElemType *e)
{
*e = L.data[i - 1];
}

Status ListEmpty(SqList L)
{ /* 初始条件:数组表示的表L已存在。*/
/* 操作结果:若L为空表,则返回TRUE,否则返回FALSE。 */
if(L.length==0)
{
return TRUE;
}
else
{
return FALSE;
}
}
...全文
1315 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
请问一下,我现在把length的长度表现出来,发现长度有问题,结果也只是第一个集合的元素,请问该怎么改
赵4老师 2018-05-08
  • 打赏
  • 举报
回复
仅供参考:
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstring>
using namespace std;
int main() {
    char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;
    char *Vowels   = "aeiou" ;
    char *AlphaNum = "0123456789abcdef" ;
    char result[45] ;
    char *last ;

    int lenA  = strlen(Alphabet) ;
    int lenV  = strlen(Vowels  ) ;
    int lenAN = strlen(AlphaNum) ;

    cout << "Alphabet = " << Alphabet << endl ;
    cout << "Vowels   = " << Vowels   << endl ;
    cout << "AlphaNum = " << AlphaNum << endl ;

    cout << "\nusing non-predicate versions" << endl ;

    //non-predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //non-predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    cout << "\nusing predicate versions" << endl ;

    //predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result  , less<char>()) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result  , less<char>()) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result  , less<char>()) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result  , less<char>()) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    return 0 ;
}
dark9527 2018-05-08
  • 打赏
  • 举报
回复
好好检查下你程序的各个子函数的功能,先确定下有没有逻辑错误,再检查其他的错误,编好程序后,少输入一些数据,单步测试一下。
真相重于对错 2018-05-08
  • 打赏
  • 举报
回复
错误太多了, 比如说 i = 0; ch=0; while (ch!= '\n') { scanf("%d", &La.data[i]); ch=getchar(); } 你的i一直是0 ,所以一直输入的是La的第一个元素,还有输入后La的length信息没有赋值,所以La的长度信息不对,Lb同La,以后union计算肯定出错
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
引用 13 楼 dark9527 的回复:
你的链表没有初始化
void init_list(SqList* l)
{

	memset(l->data,0,MAXSIZE);
	l->length=0;
}
我初始化后没乱码, 但是没有结果
dark9527 2018-05-08
  • 打赏
  • 举报
回复
你的链表没有初始化
void init_list(SqList* l)
{

	memset(l->data,0,MAXSIZE);
	l->length=0;
}
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
好吧,谢谢了......
永远的追梦人 2018-05-08
  • 打赏
  • 举报
回复
引用 9 楼 Reimu__Hakurei的回复:
看得见,我是初始化了的,for (i = 0; i < La.length; i++),
在上课,不好改代码。
永远的追梦人 2018-05-08
  • 打赏
  • 举报
回复
int main(void) { SqList La,Lb; int i; char ch; printf("请输入集合1的元素:"); i = 0; ch=0; while (ch!= '\n') { scanf("%d", &La.data[i]); ch=getchar(); } printf("请输入集合2的元素:");  i = 0; ch=0; while (ch!= '\n') { scanf("%d", &Lb.data[i]); ch=getchar(); } Union(&La,Lb); printf("集合合并后的所有元素:");  for (i = 0; i < La.Listlength(); i++) { printf("%d ", La.data[i]); } return 0; }  void Union(SqList *La,SqList Lb) { /* 将所有在表Lb中但不在La中的数据元素插入到La中 */    ElemType e;    int La_len,Lb_len;    int i;    La_len = ListLength(*La); /* 求表La的长度 */    Lb_len = ListLength(Lb);    for(i = 0; i <= Lb_len; i++)    {      GetElem(Lb, i, &e); /* 取Lb中第i个数据元素赋给e */      if(LocateElem(*La, e)!=1)/* La中不存在和e相同的元素,则插入之 */      {         ListInsert(La, ++La_len, e);      }     } }
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
看得见,我是初始化了的,for (i = 0; i < La.length; i++),
永远的追梦人 2018-05-08
  • 打赏
  • 举报
回复
for (i = 0; i < La.Listlength(); i++) { printf("%d ", La.data[i]); } 还有合并哪里 i初始化为0
永远的追梦人 2018-05-08
  • 打赏
  • 举报
回复
for (i = 0; i < La.Listlength; i++) { printf("%d ", La.data[i]); }
永远的追梦人 2018-05-08
  • 打赏
  • 举报
回复
兄弟,你看的到上面的吗?不知道为什么回复只有一点点内容显示
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
改后变成这样,还是有问题..... =
永远的追梦人 2018-05-08
  • 打赏
  • 举报
回复
SqList La,Lb; memset(La.data,0,sizeof(int)*50); memset(Lb.data,0,sizeof(int)*50); 感觉就是没初始化
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
还有,那个请问可以把改的东西发一下吗
Reimu__Hakurei 2018-05-08
  • 打赏
  • 举报
回复
忘传运行结果了
永远的追梦人 2018-05-08
  • 打赏
  • 举报
回复
你好!可以看下data数组有没有全部初始化为0。
以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的C语言文件读写操作的示例代码,包含文件打开、写入、读取和关闭等操作以下是一个简单的

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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