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--] ; } 这段代码的含义
时间: 2024-03-15 22:42:27 浏览: 51
这段代码是一个删除数组中指定元素的算法,其中ElemType是指数组中元素的类型,item是待删除的元素。算法的具体步骤如下所示:
1. 初始化左右指针i和j,i指向数组的第一个元素,j指向数组的最后一个元素。
2. 对于每个i和j,如果A[i]不是待删除元素item,则i向右移动一位;如果A[j]是待删除元素item,则j向左移动一位。
3. 如果发现A[i]是待删除元素item,而A[j]不是待删除元素item,则将A[j]的值赋给A[i],并将i向右移动一位,j向左移动一位。
4. 重复步骤2和3,直到i>=j为止。
最终,整个算法的效果就是将数组A中所有值为item的元素删除。
相关问题
已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。根据 void Delete (ElemType A[ ]. int n) 写出该程序
可以使用双指针法来实现时间复杂度为O(n)、空间复杂度为O(1)的删除算法。
具体实现步骤如下:
1. 定义两个指针i和j,初始值均为。
2. 从头开始遍历线性表A,当A[i]不等于item时,将A[i]赋值给A[j],同时i和j均加1。
3. 当A[i]等于item时,i加1,跳过该元素。
4. 最后将j的值赋给n,即可删除所有值为item的数据元素。
下面是对应的程序实现:
void Delete(ElemType A[], int n, ElemType item) {
int i = , j = ;
while (i < n) {
if (A[i] != item) {
A[j] = A[i];
j++;
}
i++;
}
n = j;
}
实现一个函数模板MyBubbleSort,对教材上的冒泡排序算法进行改进,当某一趟排序没有发生交换时则不用执行下一趟。算法实现代码应填写在alg5.h的相应函数中。在每趟排序完成后,应调用alg5.h中提供的ShowRunK函数显示该趟排序的结果。 算法测试时,第一行输入待排序元素个数,第二行输入待排序的各个元素。调用MyBubbleSort输出各趟排序结果。根据要求,补全以下代码。template<class ElemType> void ShowRunK(ElemType elem[], int n, int k) // 操作结果: 显示数组elem的各数据元素值 { cout << "第" << setw(2) << k << "趟排序结果:"; for (int i = 0; i < n; i++) { cout << setw(2) << elem[i] << " "; } cout << endl; } template <class ElemType> void MyBubbleSort(ElemType elem[], int n) // 操作结果:在数组elem中用冒泡排序进行排序
{
bool flag = true; //设置标志位
int i,j;
for(i=0;i<n-1 && flag;i++) //控制趟数
{
flag = false;
for(j=0;j<n-i-1;j++) //控制每趟排序的次数
{
if(elem[j] > elem[j+1]) //若前一个元素比后一个元素大,交换位置
{
swap(elem[j],elem[j+1]);
flag = true; //有交换,标志位为true
}
}
ShowRunK(elem,n,i+1); //显示该趟排序结果
}
}
阅读全文