C++ 顺序表删除元素的优化 - 代码分析与改进
C++ 顺序表删除元素的优化 - 代码分析与改进
这段代码演示了如何在 C++ 中使用顺序表删除元素,但存在一个逻辑错误。原始代码中,在删除元素时,只是将最后一个元素赋值给要删除的元素位置,而没有将后面的元素往前移动,导致数据丢失。
原始代码:
#include<iostream>
#define MAXSIZE 100
using namespace std;
typedef struct {
int* elem; //存储空间的基地址
int length; //当前长度
}SqList;
void InitList_Sq(SqList& L, int n) {
//构造顺序表
L.elem = new int[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
L.length = n; //空表长度为0
}
void DeleteItem(SqList& A, int item) {
/**************begin************/
//删除顺序表A中所有值为item的元素
int k=0;
for (int i = 0; i < A.length-1; i++)
{
if (A.elem[i] == item)
{
k = i;
do {
A.elem[k] = A.elem[k + 1];
} while (k < A.length - 1);
}
}
/**************end************/
}
void PrintA(SqList A) {//输出数组元素
for (int i = 0; i < A.length - 1; i++)
cout << A.elem[i] << " ";
cout << A.elem[A.length - 1] << endl;
}
int main() {
int n;
while (cin >> n)
{
if (n == 0) break;
SqList A;
InitList_Sq(A, n);
for (int i = 0; i < n; i++)
cin >> A.elem[i];
int item;
cin >> item;
DeleteItem(A, item);
PrintA(A);
}
return 0;
}
改进后的代码:
#include<iostream>
#define MAXSIZE 100
using namespace std;
typedef struct {
int* elem; //存储空间的基地址
int length; //当前长度
}SqList;
void InitList_Sq(SqList& L, int n) {
//构造顺序表
L.elem = new int[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
L.length = n; //空表长度为0
}
void DeleteItem(SqList& A, int item) {
int k = 0;
for (int i = 0; i < A.length; i++) {
if (A.elem[i] != item) {
A.elem[k] = A.elem[i];
k++;
}
}
A.length = k;
}
void PrintA(SqList A) {//输出数组元素
for (int i = 0; i < A.length - 1; i++)
cout << A.elem[i] << ' '; //使用单引号
cout << A.elem[A.length - 1] << endl;
}
int main() {
int n;
while (cin >> n)
{
if (n == 0) break;
SqList A;
InitList_Sq(A, n);
for (int i = 0; i < n; i++)
cin >> A.elem[i];
int item;
cin >> item;
DeleteItem(A, item);
PrintA(A);
}
return 0;
}
代码分析:
- 逻辑错误: 原代码中,当遇到要删除的元素时,只是将后面的元素依次赋值给要删除的元素位置,没有将后面的元素往前移动,导致数据丢失。
- 改进后的代码: 改进后的代码使用了一个计数器 k,遍历顺序表,将不等于要删除元素的值复制到新的位置,最后将顺序表的长度设置为 k。
总结:
通过分析原始代码中的逻辑错误,并提供改进后的代码,确保在删除元素时能够正确地更新顺序表,避免数据丢失。
SEO 优化:
- 标题包含关键字“C++ 顺序表 删除元素 优化”。
- 描述简要介绍代码的功能和错误所在,并强调改进后的代码优势。
- 关键词包括“C++”、“顺序表”、“删除元素”、“代码分析”、“逻辑错误”、“代码优化”、“数据结构”、“算法”。
- 内容清晰易懂,并解释代码的逻辑和优化方法。
- 使用 H2 标题区分内容,提高可读性。
- 避免使用双引号,改为单引号。
原文地址: https://www.cveoy.top/t/topic/mNzs 著作权归作者所有。请勿转载和采集!