C语言数据结构

来源:互联网 发布:java重载构造函数 编辑:程序博客网 时间:2024/06/15 23:26

假设有两个集合A和B分别用两个线性表LA和LB表示,即:线性表中的数据元素即为集合中的成员。现要求一个新的集合A=A∪B

#include<stdio.h>#include<malloc.h>#include<process.h>#define LIST_INIT_SIZE 10#define LISTINCREMENT 10typedef struct{int *elem;int length;int listsize;}SqList;int InitList(SqList *L){(*L).elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));if(! (*L).elem) exit (0);(*L).length = 0;(*L).listsize =  LIST_INIT_SIZE;return 1;}int ListInsert(SqList *L,int i,int e){int *newbase,*q,*p;if(i<1||i>(*L).listsize)return 0;if((*L).length>=(*L).listsize){newbase = (int *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(int));if(!newbase)exit(0);(*L).elem = newbase;(*L).listsize+=LISTINCREMENT;}q = (*L).elem+i-1;for(p=(*L).elem+(*L).length-1;p>=q;--p)*(p+1) = *p;*q = e;++(*L).length;return 1;}int ListTraverse(SqList L,void (*vi)(int *)){int *p;int i;p = L.elem;for(i=1;i<=L.length;i++)vi(p++);//?printf("\n");return 1;}int GetElem (SqList L,int i,int *e){if(i<1||i>L.length)exit(0);*e = *(L.elem+i-1);return 1;}int LocateElem(SqList L,int e,int (*compare)(int ,int )){int *p;int i = 1;p = L.elem;while(i<=L.length&&!compare(*p++,e))++i;if(i<=L.length)return i;else return 0;}int equal(int c1, int c2){if(c1==c2)return 1;else return 0;}void Union(SqList *La,SqList Lb){int e;int La_len,Lb_len;int i;La_len = (*La).length;Lb_len = (Lb).length;for(i=1;i<=Lb_len;i++){GetElem(Lb,i,&e);if(!LocateElem(*La,e,equal))ListInsert(La,++La_len,e);}}void print(int *c){printf("%d ",*c);}void main(){SqList La,Lb;int i,j;i = InitList(&La);if(i == 1)for(j=1;j<=5;j++)i = ListInsert(&La,j,j);printf("La = ");ListTraverse(La,print);InitList(&Lb);for(j=1;j<=5;j++)i = ListInsert(&Lb,j,2*j);printf("Lb =");ListTraverse(Lb,print);Union(&La,Lb);printf("new La= " );ListTraverse(La,print);}


0 0