假设利用两个线性表La和Lb分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的 集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线
2013-07-22 00:23
1996 查看
/*假设利用两个线性表La和Lb分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的
集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线性表La中的数据元素插入
到线性表La中去,只要从线性表Lb中依次取得每个数据元素,并依值在线性表La中进行查访,若不存在,则插入之。*/
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100//线性表存储空间的初始分量
#define LISTINCREAMENT 10//线性表存储空间的分配增量
typedef int Status;
typedef int ElemType;
//=====================================================
//动态分配顺序存储结构
//=====================================================
typedef struct{
ElemType *elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;
//=========================================================
//等于函数
//=========================================================
Status equal(ElemType a,ElemType b)
{if(a==b)
return TRUE;
else
return FALSE;
}
//=====================================================
//线性表长度的计算
//=====================================================
Status ListLength(SqList La)
{
return La.length;
}
//=========================================================
//打印函数
//=========================================================
void print(ElemType *c)
{
printf("%d ",*c);
}
//=====================================================
//构造一个空的线性表L
//=====================================================
Status InitList_Sq(SqList *l)
{
(*l).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!(*l).elem)
exit(OVERFLOW);
(*l).length=0;//线性表中元素的个数为length=0
(*l).listsize=LIST_INIT_SIZE;//线性表的大小为100个字节
return OK;
}
//=====================================================
//在顺序线性表L中第i个位置之前插入新的元素e
//=====================================================
Status ListInsert_Sq(SqList *l,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>(*l).length+1)
return ERROR;
if((*l).length>=(*l).listsize){
newbase=(ElemType*)realloc((*l).elem,((*l).listsize+LISTINCREAMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
(*l).elem=newbase;
(*l).listsize+=LISTINCREAMENT;//线性表增加listincrement长度
}
q=&((*l).elem[i-1]);//指针q指向线性表的第i个元素
for(p=&((*l).elem[(*l).length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++(*l).length;
return OK;
}
//=====================================================
//查找第一个与e满足compare()的元素位序
//=====================================================
int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{
//若找到则返回其在L中的为序,否则返回0
ElemType *p;
int i=1;
p=L.elem;
while(i<=L.length&&!(*compare)(*p++,e))
i++;
if(i<=L.length)
return i;
else
return 0;
}
//=========================================================
//用e返回L中第i个数据元素的值
//=========================================================
Status getelem(SqList l,int i,ElemType *e)
{ if(i<1||i>l.length)
exit(ERROR);
*e=*(l.elem+i-1);
return OK;
}
//=========================================================
//依次对L的每一个数据元素调用函数vi(),一旦vi()失败,则操作失败
//=========================================================
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;
}
//=====================================================
//将所有在Lb中而不再La中的数据元素插入到La中
//=====================================================
void Union(SqList *la,SqList lb)
{
int la_len,lb_len;
int i;
ElemType e;
la_len=ListLength(*la);
lb_len=ListLength(lb);
for(i=1;i<=lb_len;i++)
{
getelem(lb,i,&e);
if(!LocateElem_Sq(*la,e,equal))
ListInsert_Sq(la,++la_len,e);
}
}
//=====================================================
//主函数
//=====================================================
void main()
{
SqList la,lb;
int j,i;
i=InitList_Sq(&la);//构造一个空的线性表,如果构造成功,则返回ok
if(i==1)
for(j=1;j<=6;j++)
i=ListInsert_Sq(&la,j,j);
printf("la= ");
ListTraverse(la,print);
InitList_Sq(&lb);
for(j=1;j<=6;j++)
i=ListInsert_Sq(&lb,j,2*j);
printf("lb= ");
ListTraverse(lb,print);
Union(&la,lb);
printf("la= ");
ListTraverse(la,print);
}
集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线性表La中的数据元素插入
到线性表La中去,只要从线性表Lb中依次取得每个数据元素,并依值在线性表La中进行查访,若不存在,则插入之。*/
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100//线性表存储空间的初始分量
#define LISTINCREAMENT 10//线性表存储空间的分配增量
typedef int Status;
typedef int ElemType;
//=====================================================
//动态分配顺序存储结构
//=====================================================
typedef struct{
ElemType *elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;
//=========================================================
//等于函数
//=========================================================
Status equal(ElemType a,ElemType b)
{if(a==b)
return TRUE;
else
return FALSE;
}
//=====================================================
//线性表长度的计算
//=====================================================
Status ListLength(SqList La)
{
return La.length;
}
//=========================================================
//打印函数
//=========================================================
void print(ElemType *c)
{
printf("%d ",*c);
}
//=====================================================
//构造一个空的线性表L
//=====================================================
Status InitList_Sq(SqList *l)
{
(*l).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!(*l).elem)
exit(OVERFLOW);
(*l).length=0;//线性表中元素的个数为length=0
(*l).listsize=LIST_INIT_SIZE;//线性表的大小为100个字节
return OK;
}
//=====================================================
//在顺序线性表L中第i个位置之前插入新的元素e
//=====================================================
Status ListInsert_Sq(SqList *l,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>(*l).length+1)
return ERROR;
if((*l).length>=(*l).listsize){
newbase=(ElemType*)realloc((*l).elem,((*l).listsize+LISTINCREAMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
(*l).elem=newbase;
(*l).listsize+=LISTINCREAMENT;//线性表增加listincrement长度
}
q=&((*l).elem[i-1]);//指针q指向线性表的第i个元素
for(p=&((*l).elem[(*l).length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++(*l).length;
return OK;
}
//=====================================================
//查找第一个与e满足compare()的元素位序
//=====================================================
int LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{
//若找到则返回其在L中的为序,否则返回0
ElemType *p;
int i=1;
p=L.elem;
while(i<=L.length&&!(*compare)(*p++,e))
i++;
if(i<=L.length)
return i;
else
return 0;
}
//=========================================================
//用e返回L中第i个数据元素的值
//=========================================================
Status getelem(SqList l,int i,ElemType *e)
{ if(i<1||i>l.length)
exit(ERROR);
*e=*(l.elem+i-1);
return OK;
}
//=========================================================
//依次对L的每一个数据元素调用函数vi(),一旦vi()失败,则操作失败
//=========================================================
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;
}
//=====================================================
//将所有在Lb中而不再La中的数据元素插入到La中
//=====================================================
void Union(SqList *la,SqList lb)
{
int la_len,lb_len;
int i;
ElemType e;
la_len=ListLength(*la);
lb_len=ListLength(lb);
for(i=1;i<=lb_len;i++)
{
getelem(lb,i,&e);
if(!LocateElem_Sq(*la,e,equal))
ListInsert_Sq(la,++la_len,e);
}
}
//=====================================================
//主函数
//=====================================================
void main()
{
SqList la,lb;
int j,i;
i=InitList_Sq(&la);//构造一个空的线性表,如果构造成功,则返回ok
if(i==1)
for(j=1;j<=6;j++)
i=ListInsert_Sq(&la,j,j);
printf("la= ");
ListTraverse(la,print);
InitList_Sq(&lb);
for(j=1;j<=6;j++)
i=ListInsert_Sq(&lb,j,2*j);
printf("lb= ");
ListTraverse(lb,print);
Union(&la,lb);
printf("la= ");
ListTraverse(la,print);
}
相关文章推荐
- 数据结构链表习题2.27,假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
- 线性表LA和LB非递减有序排列,将LA,LB进行归并为新的线性表LC,要求LC中的数据元素扔非递减有序列排列
- 数据结构中线性表的基本操作-合并两个线性表-按照元素升序排列
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 数据结构5:线性表中把属于la中而不属于lb中的元素放到la中
- 线性表的合并已知两个集合A和B,现要求一个新的集合A=A∪B。例如,设A=(7,5,3,11),B=(2,6,3),合并后A=(7,5,3,11,2,6)。
- 1.创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周
- 假设用一个名为text的字符串向量存放文本文件的数据,其中的元素或者是一句话或者是一个用于表示段分隔的空字符串。将text中第一段全改为大写形式
- 数据结构:请用一个数组实现两个堆栈,要求最大地利用数组空间,使 数组只要有空间入栈操作就可以成功
- 1.创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周
- 将两个递增的链表合并成一个递减的链表(相同的元素只留下一个),并要求利用原表结点
- 1.创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周
- 1.创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周