数据结构之 删除顺序表中所有元素为X 的元素,要求时间复杂度为O(n),空间复杂度为O(1)
2017-09-30 17:07
369 查看
问题:长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的元素。
令x=100,删除顺序表中关键字为100的元素。
算法思想:用K记录顺序表L,中不等于x的元素的个数,边扫描L,边统计K,并将不等于x的元素,放在k位置上,最后修改表长。
运行结果:
令x=100,删除顺序表中关键字为100的元素。
算法思想:用K记录顺序表L,中不等于x的元素的个数,边扫描L,边统计K,并将不等于x的元素,放在k位置上,最后修改表长。
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define Maxsize 50 typedef struct SqList{ int* data; int length; }; // ---------------------------- 初始化----------------------------- bool InitList(struct SqList* L) { L->data=(int*)malloc(sizeof(int)*(Maxsize/2)); int i=0; for(i=0;i<Maxsize/2;i++) { L->data[i]=rand()%100; } L->data[2]=100; L->data[12]=100; L->data[22]=100; L->length=Maxsize/2; return true; } void del_x_100(struct SqList* LL,int x) { int i=0; int k=0; for(i=0;i<LL->length;i++) { if((LL->data[i])!=x) { LL->data[k]=LL->data[i]; k++; } } LL->length=k; } void print(struct SqList *L) { int j=L->length; int i=0; for(i=0;i<j;i++) { printf("%d ",L->data[i]); } printf("\n"); } int main() { //-------------------初始化顺序表-------------------- struct SqList L; if(InitList(&L)==true) { printf("顺序表初始化成功!\n"); } print(&L); printf("\n\n"); //------------------删除元素值为100的元素------------ del_x_100(&L,100); print(&L); printf("\n\n"); }
运行结果:
相关文章推荐
- 删除线性表中所有值为x的元素,要求时间复杂度为O(n),空间复杂度为O(1)
- 长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的元素
- 从顺序表中删除所有元素值为x的元素,要求空间复杂度为O(1)
- 《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)
- 试设计一个算法,将数组A(0..n-1)中的元素循环右移k位,并要求空间复杂度为O(1),时间复杂度为O(n)。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 如何在时间复杂度为O(n),空间复杂度为O(1)的条件下,统计数组中不同元素出现的次数
- 百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 【每日一题】查找一个字符串中第一个只出现两次的字符。要求时间复杂度为O(N),空间复杂度为O(1)
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小 .
- 查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)
- 4.给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)。
- 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
- 一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度
- 字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
- 现有1,2……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且只能交换两个数