顺序表逆置操作
思想:头尾数据交换
//顺序表逆置操作
int reverse(SqList* L)
{
if(L->length==0)
{
printf("表空\n");
return 0;
}
int i=0;
for(i=0;i<L->length/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;i<L1->length;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(i<L1->length&&j<L2->length)
{
if(L1->a[i]<L2->a[j])
{
Ins(&L3,L1->a[i]);
i++;
}
else
{
Ins(&L3,L2->a[j]);
j++;
}
}
while(i<L1->length)
{
Ins(&L3,L1->a[i]);
i++;
}
while(j<L2->length)
{
Ins(&L3,L2->a[j]);
j++;
}
printf("合并后为\n");
printList(&L3);
}
本文介绍了顺序表的基本操作,包括逆置、数据拆分和合并。通过具体的实现代码,详细解释了每种操作的方法和步骤。

被折叠的 条评论
为什么被折叠?



