数据结构线性表操作与例题总结
1. 要注意题目要求,以下所有函数为写在类中的公有函数,题目可能为普通函数,需要增加参数和返回值
2. 所有链表操作前先判断是否为空if (first->next == NULL)return;
1. 设有一个整数顺序表,编写函数将其调整为奇数在前,偶数在后。
思路为left从表头出发找到第一个偶数,right从表尾出发,找到第一个奇数,若此时left<right则交换两个元素
简化了答案的操作,方便理解与记忆。
void revise(int a[], int n)
{
int left = 0;
int right = n - 1;
int tmp = 0;
while (left < right)
{
while (a[right] % 2 == 0) right--;//右侧扫描
while (a[left] % 2 != 0) left++;//左侧扫描
if (left < right)
{
tmp = a[left];
a[left] = a[right];
a[right] = tmp;
}
}
}
要注意while循环扫描的判断条件是满足条件“指针”移动
2)调整为负数在前,正数在后。
只需将取余为零的判断条件,修改为大于0或小于0
void revise(int a[], int n)
{
int left = 0;
int right = n - 1;
int tmp = 0;
while (left < right)
{
while (a[right] >= 0) right--;//右侧扫描
while (a[left] <= 0) left++;//左侧扫描
if (left < right)
{
tmp = a[left];
a[left] = a[right];
a[right] = tmp;
}
}
}
3)在单链表中实现。
1.交换数据版
设立工作指针p、q,让p先出发找第一个偶数,找到后在定位q=p->next,保证寻找到的奇数在偶数后