本文主要是介绍《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2.10 设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)
算法思想:
设置两个指针,分别而从表的头和尾开始遍历,当遇到值为item的元素时,将右端 的uansu和左端的元素值交换。
void Delete(List &L,int &item){int i=1,j=L.length;while(i<j){while(i<j&&L.elem[i]!=item){i++;}if(i<j){while(i<j&&L.elem[j]==item){j--;}}if(i<j){L.elem[i++]=L.elem[j--];}}
}
实现:
/**
删除顺序表中所有为item的值的元素
时间复杂度O(n),空间复杂度O(1)
*/
#include<stdio.h>
#define MAX 100typedef struct Sq{int *elem;int length;
}List;int InitList(List &L){L.elem=new int[MAX];if(!L.elem){return 0;}L.length=0;return 1;
}void TraveList(List L){for(int i=0;i<L.length;i++){printf("%d ",L.elem[i]);}
}void CreateList(List &L){int loop=1;int i=0;int e;while(loop){printf("请输入元素值;");//int e;scanf("%d",&e);if(e!=0){L.elem[i++]=e;L.length=i;}else if(e==0){loop=0;}}
} void Delete(List &L,int &item){int i=1,j=L.length;while(i<j){while(i<j&&L.elem[i]!=item){i++;}if(i<j){while(i<j&&L.elem[j]==item){j--;}}if(i<j){L.elem[i++]=L.elem[j--];}}
}int main(){List L;InitList(L);//不要忘记初始化表,否则无法输入表的元素,因为表只有初始化后才存在 int n;printf("请输入L的长度:");scanf("%d",&n);CreateList(L);TraveList(L);printf("请输入要删除的标的元素:");int item;scanf("%d",&item);Delete(L,item);TraveList(L);
}
这篇关于《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!