#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
typedef int ElemType;
typedef struct
{
ElemType* elem;
int length;
int real_len;
}SqList;
//initial
int SqL_INIT(SqList* L)
{
L->elem = (int*)malloc(sizeof(int) * SIZE);
if (!L->elem)
{
printf("fail to create this memory>");
return 0;
}
L->real_len = SIZE;
L->length = 0;
return 1;
}
int SqL_len(SqList L)
{
return L.length;
}
int IsEmpty(SqList L)
{
if (L.length == 0)
{
printf("this is empty>");
return 0;
}
return 1;
}
//创建元素
void SqL_input(SqList *L)
{
int i = 0;
int j = 0;
printf("输入你要插入的元素个数>");
scanf("%d", &i);
L->real_len=L->length = i;
for (j; j < L->length; j++)
{
printf("输入第%d个元素的值", j+1);
scanf("%d",&L->elem[j]);
printf("\n");
}
}
//合并元素
void MergeList(SqList* M, SqList* N, SqList* R)
{
int* p, *p_lat, *q, *q_lat,*r;
p = M->elem;
p_lat = M->elem + M->length-1;
q = N->elem;
q_lat = N->elem + N->length-1;
r = R->elem;
while ((p<=p_lat) && (q<=q_lat))
{
*r = (*p < *q) ? (*p) : (*q);//使用的是三目运算符,我自己比较倾向于理解这种
//r接受了谁的值,谁的指针就移动
if (*r == *p)//r
{
p++;
}
else
{
q++;
}
r++;//移动r
R->length++;//记录c中的元素个数,因为初始化的时候c=0;
}
//分别讨论p/q到达结尾之前的情况
while (p<=p_lat)
{
*r++ = *p++;
R->length++;//记录c中的元素个数,因为初始化的时候c=0;
}
while (q<=q_lat)
{
*r++ = *q++;
R->length++;//记录c中的元素个数,因为初始化的时候c=0;
}
}
//打印元素
void PRINT(SqList L)
{
int i = 0;
if (L.length == 0)
{
printf("this list is empty");
exit(EXIT_FAILURE);
}
for (i = 0; i < L.length; i++)
{
printf("%d\n", L.elem[i]);
}
}
int main()
{
SqList a, b, c;
SqL_INIT(&a);
SqL_INIT(&b);
SqL_INIT(&c);
SqL_input(&a);
SqL_input(&b);
//因为开辟的空间很大,所以这里就没有考虑c空间溢出的情况
MergeList(&a, &b, &c);
PRINT(c);
return 0;
}