#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;
}
复制代码
c实现集合的交集
最新推荐文章于 2024-07-07 11:51:41 发布