顺序表的删除
#include <stdio.h>#define MaxSize 10 //定义最大长度
typedef struct{
int data; //用静态的“数组”存放数据元素
int length; //顺序表的当前长度
}SqList; //顺序表的类型定义
//基本操作:在L的位序i处插入元素e.
bool ListDelete(SqList &L,int i,int &e){
if(i<1||i>L.length+1){ //判断i的范围是否有效
return false;
}
e=L.data; //将被删除的元素赋值给e
for(int j=i;j<L.length;j++){ //将第i个位置后的元素前移
L.data=L.data; } //注意位序、数组下标的关系,并从前面的元素依次移动
L.length--; //线性表长度减一
return true;
}
int main(){
SqList L; //声明一个顺序表
InitList(L); //初始化顺序表
//。。。此处省略一些代码,插入几个元素
int e=-1; //用变量e把删除的元素“带回来”
if(ListDelete(length,3,e)){
printf("已删除第3个元素,删除元素值为=%d\n",e);
}else{
printf("位序i不合法,删除失败\n");
}
return 0;
} 顺序表删除操作代码修正
你提供的代码存在几个关键问题,修正后的代码如下:
#include <stdio.h>// 补全头文件
#define MaxSize 10
typedef struct {
int data;// 修正:这里应该定义数组
int length;
} SqList;
bool ListDelete(SqList &L, int i, int &e) {
if (i < 1 || i > L.length) {// 修正判断条件
return false;
}
e = L.data;// 修正:获取被删除元素
// 删除位置后的元素前移
for (int j = i; j < L.length; j++) {// 修正循环条件
L.data = L.data;
}
L.length--;// 表长减1
return true;
}
主要修正点说明:
[*]原代码缺少数组定义,结构体中的 int data 应改为 int data
[*]删除位置判断条件错误,正确范围应为 i < 1 || i > L.length
[*]元素前移时,原代码循环条件应改为 j < L.length
[*]被删除元素赋值应使用 L.data(数组下标从0开始)
使用示例:
int main() {
SqList list = {{1,2,3,4,5}, 5};// 初始化顺序表
int deleted_value;
if (ListDelete(list, 3, deleted_value)) {
printf("删除成功,被删除元素:%d", deleted_value);
} else {
printf("删除失败");
}
return 0;
}
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]