typedef int Status;
typedef int ElemType;
typedef struct{
int data[maxsize];
int length;
}SqList;
Status CreatList(SqList *L){
int tempdata;
L->length=0;
for(int i=0;i<=maxsize;i++){
printf("请输入第%d个元素的值,-1结束\n", i+1);
scanf("%d", &tempdata);
if(tempdata==-1){
return OK;
}
L->data[i] = tempdata;
L->length++;
}
return OK;
}
Status getLength(SqList *L){
return L->length;
}
Status insertList(SqList *L, int i, ElemType e){
if(L->length==maxsize){
printf("目前线性表的长度已满,不可再插入元素");
return ERROR;
}
if(i<1||i>L->length+1){
printf("您输入的插入位置有误");
return ERROR;
}
if(i!=L->length+1){
for(int i=i;i<L->length;i++){
L->data[i]=L->data[i-1];
}
}
L->data[i-1]=e;
return OK;
}
Status printList(SqList *L){
for(int i=0;i<L->length;i++){
printf("\n第%d个元素为%d", i+1, L->data[i]);
}
return OK;
}
Status deleteList(SqList *L, int i, int e){
if(L->length==0){
printf("线性表的长度为0,不可进行删除操作");
return ERROR;
}
if(i==0||i>L->length){
printf("您输入的删除位置有误,不可进行删除操作");
return ERROR;
}
e = L->data[i-1];
if(i!=L->length){
for(int n=i;n<L->length;n++){
L->data[n-1] = L->data[n];
}
L->length--;
return e;
}
L->data[i-1] = 0;
return e;
}
Status Union(SqList *LA, SqList *LB){
int lengtha = LA->length;
int lengthb = LB->length;
int isEqual = 0;
for(int i=0;i<lengthb;i++){
if(searchList(LA, LB->data[i])){
isEqual = 1;
}
if(!isEqual){
insertList(LA, ++lengtha, LB->data[i]);
LA->length++;
}
isEqual = 0;
}
return OK;
}
Status searchList(SqList *LA, int e){
int lengtha = LA->length;
for(int i=0;i<lengtha;i++){
if(LA->data[i]==e){
return TRUE;
}
}
return FALSE;
}
Status deleteValue(SqList *L, int e){
int i=0;
while(L->data[i]!=e&&i<L->length){
i++;
}
if(i<L->length){
for(int n=i;n<L->length;n++){
L->data[n]=L->data[n+1];
}
L->length--;
return OK;
}
printf("线性表中没有对应的元素,无法删除");
return ERROR;
}
Status mergeList(SqList *LA, SqList *LB){
int lengthb = LB->length;
int isEqual = 0;
for(int i=0;i<lengthb;i++){
if(searchList(LA, LB->data[i])){
isEqual = 1;
}
if(isEqual){
deleteValue(LA,LB->data[i]);
}
isEqual = 0;
}
return OK;
}
int main(int argc, const char * argv[]) {
SqList sqlistA;
SqList sqlistB;
int e;
printf("请输入线性表A的内容:\n");
CreatList(&sqlistA);
printList(&sqlistA);
printf("\n请输入线性表B的内容:\n");
CreatList(&sqlistB);
printList(&sqlistB);
printf("\n目前线性表A的长度为%d", getLength(&sqlistA));
printf("\n目前线性表B的长度为%d", getLength(&sqlistB));
Union(&sqlistA, &sqlistB);
printf("\n合并后的线性表A的长度为%d, 线性表A的内容为:", getLength(&sqlistA));
printList(&sqlistA);
mergeList(&sqlistA, &sqlistB);
printf("\n再与线性表B进行相交的线性表A的变成了:");
printList(&sqlistA);
insertList(&sqlistA, 2, 9);
printf("\n向线性表A中的第二个位置插入元素9操作后得:");
printList(&sqlistA);
deleteList(&sqlistA, 2, e);
printf("\n将线性表A的中第二个位置元素删除操作后得:");
printList(&sqlistA);
getchar();
return 0;
}