69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OVERFLOW -1
#define OK 1
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList *L){
L->elem=malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
int ListInsert_Sq(SqList *L,int i,int e){
//在顺序表的第i个位置之前插入新的元素e
//i<1 || i>L.length+1
int *p,*q,*newbase;
if(i<1 || i>L->length+1) return ERROR;
if(L->length>=L->listsize){
newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(OVERFLOW);
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 OK;
}
int ListDelete_Sq(SqList *L,int i,int *e){
//在顺序表L中删除第i个元素,用e返回
//i的合法取值范围1<=i<=L->length
int *p,*q;
if(i<1 || i>L->length) return ERROR;
p=L->elem+i-1;
*e=*p;
q=L->elem+L->length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L->length;
return OK;
}
int LocateElem_Sq(SqList *L,int e){
//在顺序表L中查找与e相同的第一个元素
//若存则返回元素的位序,若不存在,返回ERROR
int i=1,*p;
p=L->elem;
while(e!=*p++ && i++<L->length);
if(i<=L->length)
return i;
else
return ERROR;
}
int GetElem(SqList *L,int i){
//从线性表L中取出第i个元素
//1<=i<=L->length
if(i<1 || i>L->length) return ERROR;
return L->elem[i-1];
}
void Union(SqList *La,SqList *Lb){
//将线性表La中的元素插入到线性表Lb中,
//若此元素Lb中不存在则存入 若存在 则不存入
int i,a;
for(i=1;i<=La->length;i++)
if(!LocateElem_Sq(Lb,a=GetElem(La,i)))
ListInsert_Sq(Lb,Lb->length+1,a);
}
void main()
{
SqList la,lb;
int a,i;
InitList_Sq(&la);
InitList_Sq(&lb);
for(i=1;i<=10;ListInsert_Sq(&la,i++,i)); // 这里 最后的i如果变成i+1 输出的结果一样 求解????
for(i=1;i<=10;ListInsert_Sq(&lb,i++,i+6));
for(i=0;i<la.length;printf("%d ",la.elem[i++]));
printf("\n");
for(i=0;i<lb.length;printf("%d ",lb.elem[i++]));
printf("\n");
Union(&la,&lb);
for(i=0;i<lb.length;printf("%d ",lb.elem[i++]));
printf("\n");
printf("%d %d\n",la.length,lb.length);
}