数据结构 已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度O(n)空间复杂度为O的算法,该算法删除线性表中所有值为item的数据元素。
Posted Aiden (winner)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度O(n)空间复杂度为O的算法,该算法删除线性表中所有值为item的数据元素。相关的知识,希望对你有一定的参考价值。
分析:
在顺序存储的线性表上删除元素,通常要涉及到一系列的移动(删除第i个元素,第i+1至第n个元素要依次前移)。本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移为item的数据元素位置。
void Delete(ElemType A[],int n)
//A是有n个元素的一维数组,本算法A中所有值为item的元素
i=1; j=n; //设置数组低、高端指针(下标)
while(i<j)
while(i<j&&A[i]!=item) i++; //若值不为item,左移指针
if(i<j)
while(i<j&&A[j]==item) j--; //若右端元素为item,左移指针
if(i<j)A[i++]=A[j--];
以上是关于数据结构 已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度O(n)空间复杂度为O的算法,该算法删除线性表中所有值为item的数据元素。的主要内容,如果未能解决你的问题,请参考以下文章