求一个c++程序,求线性表la和lb的并集lc的程序
kuaidi.ping-jia.net 作者:佚名 更新日期:2024-08-27
用c++编写程序,求两线性表的交集,并集,差集。
int main(void)
{
SqList la, lb;
int a=0, b=0;
cout << "输入la的长度:";
cin >> a;
cout << "输入lb的长度:";
cin >> b;
InitList(la, a);
InitList(lb, b);
ListInsert(la);
ListInsert(lb);
cout << "la:";
TraverseList(la);
cout << "lb:";
TraverseList(lb);
cout << "la与lb的并集lc:";
unionList(la, lb);
return 0;
} ②:list.h:#include<iostream>
using namespace std;
#ifndef LIST_H_
#define LIST_H_
#define LISTSIZE 100
typedef char DataType;//声明DataType类型
typedef struct SqList
{
DataType items[LISTSIZE]; //存放线性表数据
int length;
}LIST;//初始化空线性表
void InitList(LIST &L, int length)
{
L.length=length;
if(L.length>=LISTSIZE)//判表满
{
cout<<"线性表满溢"<<endl;
}
}//向线性表输入数据
int ListInsert(LIST &L)
{
cout << "依次输入线性表的数据:";
for(int j=0; j<L.length; j++)
{
cin >> L.items[j];
}
return 1;
}//遍历输出线性表
int TraverseList(LIST &L)
{
int i;
for(i=0;i<L.length;i++)
cout<<L.items[i]<<" ";
cout<<endl;
return 1;
}
//按元素值查找元素的位置
int LocateElem(LIST &L, DataType e)
{
int flag=0;
for(int i=0; i<L.length; i++)
{
if(L.items[i]==e)
{
flag=i+1;
}
}
return flag;
}//求两个线性表的并集
int unionList(LIST &L1, LIST &L2)
{
for(int i=0; i<L1.length; i++)
cout << L1.items[i] << " ";
for(int i=0; i<L2.length; i++)
{
if(!LocateElem(L1, L2.items[i]))
{
cout << L2.items[i] << " ";
}
}
return 0;
}
/**/
#endif /* LIST_H_ */
如果有哪里不足的话,请指出
试写一个算法,将两个有序线性表合并成一个有序线性表。
答:void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ //已知单链线性表La和Lb的元素按非递减排列 //归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 AH=La;BH=Lb;CH=Lc;pa=AH_next;pb=BH_next;CH=pc=AH;//用La的头结点作为Lc的头结点 while(pa&&pb){ if(...
数据结构算法实现:利用两个线性表LA和LB分别表示两个集合A和B,现要求...
答:if(i<=L.length)return i;else return 0;} void print(ElemType *c){ printf("%d ",*c);} status ListTraverse(sqlist l,void(*vi)(ElemType *)){ ElemType *p;int i;p=l.elem;for(i=1;i<=l.length;i++)vi(p++);printf("\n");return OK;} void Union(sqlist *la,sqlist...
求线性表的C语言程序
答:printf("在此线性表中没有该元素!\n");else printf("该元素在线性表中的位置为:%d\n",p);} 第四个文件InsList.cpp include "common.h"include "seqlist.h"/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,i的合法取值范围是 1≤i≤L->last+2 */ int ...
谁能给一个简单的线性表操作C语言完整程序?
答:1、线性表有两种:typedef struct { ElemType* elem;int length;int listsize;} SqList;//顺序表 void InitList_Sq (SqList& l) { l.elem=new ElemType [LIST_INIT_SIZE];l.length=0;l.listsize=LIST_INIT_SIZE;}//初始化顺序表 然后SqList La;InitList_Sq(La);就可以 typedef struct ...
【100分】数据结构——使用C语言(线性表)
答:{//构造一个空线性表L La.elem=(int *) malloc(100 *sizeof(int));//分配空间 if (!La.elem) exit(-2);//未分配则 跳出;La.length=0;La.listsize= 100 ;} int Listinsert_sq(sqlist &L,int i,int e) // listinsert_sq;插入一个元素 {int *newbase;int *p,*q;if (i<...
线性表的拆分与合并
答:已知线性表LA的数据元素(n个,n为偶数),现要求将LA拆开成两个新的线性表LB,LC。要求LB中的数据元素为LA中的奇数位序的数据元素(a1,a3,…,an-1),LC中的数据元素为LA中的偶数位序... 已知线性表LA的数据元素(n个,n为偶数),现要求将LA拆开成两个新的线性表LB,LC。要求LB中的数据元素为LA中的奇数位序的...
关于c语言线性表的一个问题,请高手指教!
答:pa_last = pa + La.length - 1;pb_last = pb + Lb.length - 1;ifdef NUM printf("pa_last=%c\npb_last=%c\n",*pa_last,*pb_last);endif;/*链接*/ while (pa <= pa_last && pb <= pb_last)if (*pa <= *pb){ *pc = *pa++; pc++;} else { *pc = *pb++; p...
设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合
答:可以搞个链表来实现下#include <stdarg.h>#include <stdio.h>typedef struct sortlist{int v;struct sortlist* next;} SortList;SortList* add_to_list(SortList* pre, int v) {SortList* list = (SortList*) malloc(sizeof(SortList));if (list) {list->v = v;list->next = NULL;...
问题描述:假设两线性表LA和LB分别表示两集合A和B,要求新集合A=A并B...
答:include <algorithm> include <iostream> include <iterator> include <list> using namespace std;int main(){ int a[]={1,5,8,12,5,-5,32};int b[]={3,5,1,-3,10};list< int > set1(a,a+sizeof(a)/sizeof(int));list< int > set2(b,b+sizeof(b)/sizeof(int));list...
已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表L...
答:LinkList _LinkList = new LNode();if(_LinkList){_LinkList->next = NULL;} for(int i = 0 ; i < n ; i++){ LinkList p = new LNode();cout<<"输入第"<<(i+1)<<"个元素:";cin>>p->data;p->next = _LinkList->next;_LinkList->next = p;}return _LinkList;} ...
//直接上代码:#includeusing namespace std;int main(){int a,b;int c,d;cout>a>>b;cout>c>>d;if(a>b||c>d) {coutb){coutb) min=b,max=d;else min=d,max=b;cout=b) coutb) min=b,max=d;else min=d,max=b;cout<<"交集为:"<<"["<<c<<","<<min<<"]"<<endl;cout<<"并集为:"<<"["<<a<<","<<max<<"]"<<endl;if(c<=a) cout<<"差集为:空集"<<endl;else{cout<<"差集为:"<<"["<<a<<","<<c-1<<"]";if(d<b){cout<<","<<"["<<d-1<<","<<b<<"]";}cout<<endl;}}}return 0;}
数据结构啊,那用set或者哈希表之类的,键值不能重复,然后把la和lb的元素都插进去就好了,第一次出现能成功插入,之后再出现的就插入失败了,所以能得到 并集。
看来这个问题真的有点难.....我都搞了一个多钟头了我分为两个文件来做: ①:list.cpp:#include"list.h"int main(void)
{
SqList la, lb;
int a=0, b=0;
cout << "输入la的长度:";
cin >> a;
cout << "输入lb的长度:";
cin >> b;
InitList(la, a);
InitList(lb, b);
ListInsert(la);
ListInsert(lb);
cout << "la:";
TraverseList(la);
cout << "lb:";
TraverseList(lb);
cout << "la与lb的并集lc:";
unionList(la, lb);
return 0;
} ②:list.h:#include<iostream>
using namespace std;
#ifndef LIST_H_
#define LIST_H_
#define LISTSIZE 100
typedef char DataType;//声明DataType类型
typedef struct SqList
{
DataType items[LISTSIZE]; //存放线性表数据
int length;
}LIST;//初始化空线性表
void InitList(LIST &L, int length)
{
L.length=length;
if(L.length>=LISTSIZE)//判表满
{
cout<<"线性表满溢"<<endl;
}
}//向线性表输入数据
int ListInsert(LIST &L)
{
cout << "依次输入线性表的数据:";
for(int j=0; j<L.length; j++)
{
cin >> L.items[j];
}
return 1;
}//遍历输出线性表
int TraverseList(LIST &L)
{
int i;
for(i=0;i<L.length;i++)
cout<<L.items[i]<<" ";
cout<<endl;
return 1;
}
//按元素值查找元素的位置
int LocateElem(LIST &L, DataType e)
{
int flag=0;
for(int i=0; i<L.length; i++)
{
if(L.items[i]==e)
{
flag=i+1;
}
}
return flag;
}//求两个线性表的并集
int unionList(LIST &L1, LIST &L2)
{
for(int i=0; i<L1.length; i++)
cout << L1.items[i] << " ";
for(int i=0; i<L2.length; i++)
{
if(!LocateElem(L1, L2.items[i]))
{
cout << L2.items[i] << " ";
}
}
return 0;
}
/**/
#endif /* LIST_H_ */
如果有哪里不足的话,请指出
答:void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ //已知单链线性表La和Lb的元素按非递减排列 //归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 AH=La;BH=Lb;CH=Lc;pa=AH_next;pb=BH_next;CH=pc=AH;//用La的头结点作为Lc的头结点 while(pa&&pb){ if(...
答:if(i<=L.length)return i;else return 0;} void print(ElemType *c){ printf("%d ",*c);} status ListTraverse(sqlist l,void(*vi)(ElemType *)){ ElemType *p;int i;p=l.elem;for(i=1;i<=l.length;i++)vi(p++);printf("\n");return OK;} void Union(sqlist *la,sqlist...
答:printf("在此线性表中没有该元素!\n");else printf("该元素在线性表中的位置为:%d\n",p);} 第四个文件InsList.cpp include "common.h"include "seqlist.h"/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,i的合法取值范围是 1≤i≤L->last+2 */ int ...
答:1、线性表有两种:typedef struct { ElemType* elem;int length;int listsize;} SqList;//顺序表 void InitList_Sq (SqList& l) { l.elem=new ElemType [LIST_INIT_SIZE];l.length=0;l.listsize=LIST_INIT_SIZE;}//初始化顺序表 然后SqList La;InitList_Sq(La);就可以 typedef struct ...
答:{//构造一个空线性表L La.elem=(int *) malloc(100 *sizeof(int));//分配空间 if (!La.elem) exit(-2);//未分配则 跳出;La.length=0;La.listsize= 100 ;} int Listinsert_sq(sqlist &L,int i,int e) // listinsert_sq;插入一个元素 {int *newbase;int *p,*q;if (i<...
答:已知线性表LA的数据元素(n个,n为偶数),现要求将LA拆开成两个新的线性表LB,LC。要求LB中的数据元素为LA中的奇数位序的数据元素(a1,a3,…,an-1),LC中的数据元素为LA中的偶数位序... 已知线性表LA的数据元素(n个,n为偶数),现要求将LA拆开成两个新的线性表LB,LC。要求LB中的数据元素为LA中的奇数位序的...
答:pa_last = pa + La.length - 1;pb_last = pb + Lb.length - 1;ifdef NUM printf("pa_last=%c\npb_last=%c\n",*pa_last,*pb_last);endif;/*链接*/ while (pa <= pa_last && pb <= pb_last)if (*pa <= *pb){ *pc = *pa++; pc++;} else { *pc = *pb++; p...
答:可以搞个链表来实现下#include <stdarg.h>#include <stdio.h>typedef struct sortlist{int v;struct sortlist* next;} SortList;SortList* add_to_list(SortList* pre, int v) {SortList* list = (SortList*) malloc(sizeof(SortList));if (list) {list->v = v;list->next = NULL;...
答:include <algorithm> include <iostream> include <iterator> include <list> using namespace std;int main(){ int a[]={1,5,8,12,5,-5,32};int b[]={3,5,1,-3,10};list< int > set1(a,a+sizeof(a)/sizeof(int));list< int > set2(b,b+sizeof(b)/sizeof(int));list...
答:LinkList _LinkList = new LNode();if(_LinkList){_LinkList->next = NULL;} for(int i = 0 ; i < n ; i++){ LinkList p = new LNode();cout<<"输入第"<<(i+1)<<"个元素:";cin>>p->data;p->next = _LinkList->next;_LinkList->next = p;}return _LinkList;} ...