c实现集合的交集

#include <iostream>
#include <stack>
#include <list>
using namespace std;

//第一种先用数组实现线性表,再进行处理
typedef int Elemtype;
#define LIST_INIT_SIZE 50
struct MyList
{
	Elemtype *elem;
	int length;
	int size;
	int pos;
};

bool initList(MyList *L){
	L->elem = (Elemtype *)malloc(LIST_INIT_SIZE * sizeof(Elemtype));
	if(!L->elem) return 1;
	L->length = 0;
	L->pos = 0;
	L->size = LIST_INIT_SIZE;
	return 0;
}

void printList(MyList &L){
	for(int i=0;i<L.length;i++){
		cout<<L.elem[i];
	}
	cout<<endl;
}

bool createList(MyList *l,Elemtype *arr,int len){
	initList(l);
	if(len>l->size) return 1;
	for(int i=0;i<len;i++){
		l->elem[i] = arr[i];
	}
	l->length = len;
	return 0;
}

bool MyInsert(int x,MyList *l1){
	if(l1->length>l1->size) return 1;
	l1->elem[l1->length++] = x;
	return 0;
}

MyList Insertsect(MyList *l1,MyList *l2){
	MyList res;
	initList(&res);
	int p1 = l1->length-1;
	int p2 = l2->length-1;
	while(p1>=0&& p2>=0){
		if(l1->elem[p1] < l2->elem[p2]){
			p2--;;
		}
		else if(l1->elem[p1] > l2->elem[p2]){
			p1--;
		}
		else{
			MyInsert(l1->elem[p1],&res);
			p1--;
			p2--;
		}

	}
	return res;

}


int main(){
	MyList a;
	MyList b;
	Elemtype aa[]= {1,2,3,4,5};
	Elemtype bb[]= {3,4,5,6,7};
	createList(&a,aa,5);
	createList(&b,bb,5);
	MyList c = Insertsect(&a,&b);
	printList(c);
	return 0;
};


//第二种伪代码
List Insertsect2(List &l1,List &l2){
	List res = CreateList();
	Position p1 = First(l1);
	Position p2 = First(l2);
	Position resP = res;
	while(p1&&p2){
		if(Retrieve(p1) > Retrieve(p2))
			p2 = Advance(p2);
		else if(Retrieve(p1) < Retrieve(p2))
			p1 = Advance(p1);
		else {
			Insert(Retrieve(p1),resP);
			p1 = Advance(p1);
			p2 = Advance(p2);
			resP = Advance(resP);
		}
	}
	//print
	Position p= Advance(res);
	while(p){
		cout<<Retrieve(p);
		p = Advance(p);
	}
	return res;
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值