数据结构 已知长度为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的数据元素。的主要内容,如果未能解决你的问题,请参考以下文章

顺序表算法设计笔记

线性表的顺序存储结构

数据结构(C++)学习笔记——线性表

数据结构与算法 Chapter 2 线性表

数据结构 平均查找长度

数据结构习题—链表