顺序表逆置操作
思想:头尾数据交换
//顺序表逆置操作
int reverse(SqList* L)
{
if(L->length==0)
{
printf("表空n");
return 0;
}
int i=0;
for(i=0;ilength/2;i++)
{
ElemType t;
t=L->a[i];
L->a[i]=L->a[L->length-1-i];
L->a[L->length-1-i]=t;
}
printf("逆置后数据为n");
printList(L);
printf("n");
return 1;
}
顺序表数据拆分
思想:暴力方式直接遍历一遍
//将顺序表中数据拆分成存放奇数数据和偶数数据的两个顺序表
int separate(SqList* L1)
{
SqList L2=createList();
SqList L3=createList();
Init(&L2);
Init(&L3);
for(int i=0;ilength;i++)
{
if(L1->a[i]%2==0)
Ins(&L2,L1->a[i]);
else
Ins(&L3,L1->a[i]);
}
printf("奇数顺序表为n");
printList(&L3);
printf("偶数顺序表为n");
printList(&L2);
printf("n");
}
合并操作
思想:
1.判断两个链表是否走到空了,否,执行比较将小的数据插入进去
2.执行完第一个while循环后还需要考虑是否还有顺序表数据没有插入完成
3.用两个while循环分别判断一下呢两个链表是否为空
//将两个顺序表数据合并到一个顺序表中
void combine(SqList* L1,SqList* L2)
{
SqList L3=createList();
Init(&L3);
int i=0,j=0;
while(ilength&&jlength)
{
if(L1->a[i]a[j])
{
Ins(&L3,L1->a[i]);
i++;
}
else
{
Ins(&L3,L2->a[j]);
j++;
}
}
while(ilength)
{
Ins(&L3,L1->a[i]);
i++;
}
while(jlength)
{
Ins(&L3,L2->a[j]);
j++;
}
printf("合并后为n");
printList(&L3);
}



