只需要将被删除位置之后的元素全部向前移动一位就行了
void ListDelete(Sqlist sq,int n) //n是从1开始的位置
{
if(n<1 || n>sq.length)
{
printf("Delete failed");
return;
}
n=n-1; //转换为下标
for(int i=n;i<sq.length-1;i++)
sq.data[i] = sq.data[i+1];
sq.length--;
}
看你是链表还是线性表,具体list的代码是什么
该回答引用GPTᴼᴾᴱᴺᴬᴵ
题目要求删除数组A的第k个元素,可以使用循环遍历数组A,将第k个元素之后的元素依次向前移动一位,最后将数组长度减1。
以下是一个示例代码,假设要删除的元素下标为k-1,数组A的长度为n:
#include <stdio.h>
void ListDelete(int A[], int n, int k) {
if (k < 1 || k > n) { // 判断删除位置是否合法
printf("Delete failed\n");
return;
}
for (int i = k; i < n; i++) {
A[i-1] = A[i];
}
n--;
printf("%d", A[0]);
for (int i = 1; i < n; i++) {
printf(" %d", A[i]);
}
printf("\n");
}
int main() {
int A[30], n, k;
scanf("%d", &A[0]);
n = 1;
while (A[n-1] != -1) {
scanf("%d", &A[n]);
n++;
}
scanf("%d", &k);
ListDelete(A, n-1, k);
return 0;
}
在这个代码中,ListDelete函数用于删除数组A的第k个元素并输出删除后的数组,如果删除位置不合法则输出"Delete failed"。
·
首先判断删除位置是否合法,如果合法,则从第k个元素开始往前移动一位,直到最后一个元素。数组长度减1后,依次输出数组A中的元素即可。如果删除位置不合法,则直接输出"Delete failed"。