/**
* 用顺序表实现 王道P18 T3
*
* ①算法思想:
* 设置两个变量i和k同时从第一个元素开始向后移动,当i位置的元素不等于x时,覆盖到k位置上,然后两者同时向后移动,
* 如果i位置的元素等于x,那么i向后移动,k不动,
* 这种方法满足题目对于时间复杂度和空间复杂的要求,虽然两个变量i和k,但实则是在一个数组中完成的。
*
* ②数据结构:
* typedef struct{
* int data[MaxSize];
* int length;
* };
*
* ③算法设计
*/
#include <stdio.h>
#define MaxSize 100
typedef struct{
int data[MaxSize];
int length;
}SqList;
void DeleteX(SqList &L,int X){
int k = 0;
for (int i = 0; i < L.length; i++) {
if(L.data[i] != X){
L.data[k++] = L.data[i];//相当于 L.data[k] = L.data[i];k++;
}
}
L.length = k;//为什么不是k + 1?因为执行最后一个for循环时k++了
}
//以下用于测试
void InitList(SqList &L){
for (int i = 0; i < MaxSize; ++i) {
L.data[i] = 0;
}
for(int i = 0;i < 5;i++){
L.data[i] = i;
}
L.length = 5;
}
void PrintList(SqList L){
for (int i = 0; i < MaxSize; ++i) {
printf("%d ",L.data[i]);
}
printf("\n");
}
int main(){
SqList L;
InitList(L);
PrintList(L);
DeleteX(L,2);
PrintList(L);
}
王道书P18 T3(静态顺序表实现)
于 2022-07-01 14:55:35 首次发布