做问卷的网站有哪些,学校为什么要做网站,网络公司网站优化网站建设,网站建设有关图片对长度为n的顺序表L#xff0c;编写一个时间复杂度为O(n)#xff0c;空间复杂度为O(1)的算法#xff0c;该算法删除线性表中的所有值为x的数据元素
算法思路#xff1a; 用count标记遇到x的次数#xff0c;每次遇到x#xff0c;count 遇到非x的元素#xff0c;把它前移…对长度为n的顺序表L编写一个时间复杂度为O(n)空间复杂度为O(1)的算法该算法删除线性表中的所有值为x的数据元素
算法思路 用count标记遇到x的次数每次遇到xcount 遇到非x的元素把它前移count个位置
举例说明 现有顺序表1 2 2 3 4 2 5要求删除所有元素2 遍历到4号下标也就是3的位置count值为2那么把3前移2个位置 也就是变成了1 3 2 3 4 2 5
遍历到5号下标也就是4的位置count值为2那么把4前移2个位置 也就是变成了1 3 4 3 4 2 5
遍历到6号下标是2countcount变为3
遍历到7号下标也就是5的位置count值为3把5前移3个位置 也就是变成了1 3 4 5 4 2 5
最后lengthlength-count也就是顺序表长度变成了7-34那么我们顺序表也就是1 3 4 5
//初始化及打印函数
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#define MaxSize 10//定义最大长度
int InitArr[10] { 1,2,2,3,4,2,5,2,6,7 };typedef struct {int data[MaxSize];//用静态的数据存放数据元素int length;//顺序表当前长度
}Sqlist;//顺序表的类型定义void print(Sqlist* L)
{for (int i 0;i L-length;i){printf(%d , L-data[i]);}
}
//初始化一个顺序表
void InitList(Sqlist* L)
{for (int i 0;i MaxSize;i){L-data[i] InitArr[i];//将所有数据元素设置为默认初始值}L-length 10;//顺序表初始长度为0
}对长度为n的顺序表L编写一个时间复杂度为O(n)空间复杂度为O(1)的算法该算法删除线性表中的所有值为x的数据元素
//对长度为n的顺序表L编写一个时间复杂度为O(n)空间复杂度为O(1)的算法
//该算法删除线性表中的所有值为x的数据元素//算法思路
void del_x(Sqlist* L,int x) {int i 0;int count 0;//标记遍历到的x的个数for (i 0;i (*L).length;i) {if ((*L).data[i] x) {count;}else {(*L).data[i - count] (*L).data[i];}}(*L).length - count;
}
int main()
{Sqlist L;InitList(L);//初始化一个顺序表1,2,2,3,4,2,5,2,6,7printf(初始顺序表为);print(L);printf(请输入一个值x进行删除操作);int x 0;scanf(%d, x);printf(\n);del_x(L,x);printf(删除所有值为x的元素后顺序表为:);print(L);return 0;
}