额,专业课开始的有点晚,现在才开始,然后今晚刷完了顺序表的算法题,发现第三题说了一种解法但并没给出具体代码,我这边在codeblock上写出了对应功能的代码(C语言),第一次写这种如果有错误还希望大家指出,轻点喷。
算法描述:对长度为n的顺序表,要求删除其中值为x的数据元素,请你编写一个程序头尾两个指针,从两端向中间移动,在遇到最值为x的元素时直接将最右端非x的数据元素左移至x的位置,直到两只真相遇时结束,其时间复杂度为O(n),空间复杂度为S(n)。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=0;
int j=6;
int a[7] = {2,2,3,2,5,6,3};
int temp;
while (i <= j){
while (i <= j && a[i] != 2) {
i++;
}
while (i <= j && a[j] == 2) {
j--;
}
if (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
} else {
i++;
}
}
for(int x=0;x<7;x++){
printf(" %d",a[x]);
}
}
如果不对可以跟我说一下,今后我局的比较不错的算法题还会继续额发出来与大家分享!