关于数据结构顺序表的删除

img


#include 
#define MAXSIZE 10


typedef struct {
    int elem[MAXSIZE];
    int length;
}sqlist;
void listdelete(sqlist &l,int i){
    for(int j=i;j-1]=l.elem[j];
        printf("111\n");
    }
    l.length--;
    
    
}
int main(){
    sqlist l;
    int n;
    l.length=n;
    scanf("%d",&n) ;
    for(int i=0;iscanf("%d",&l.elem[i]);
    }
    int i;
    scanf("%d",&i);
    
    printf("Before:(%d",l.elem[0]);
    for(int i=1;iprintf(",%d",l.elem[i]);
        
    }
    printf(")\n");
    if(i<1||i>l.length){
        printf("Delete position error!");
    }
    else{
        listdelete(l,i);
        printf("After:(%d",l.elem[0]);
        for(int j=1;jprintf(",%d",l.elem[j]);
        }
        printf(")");
    }return 0;
}

img


为什么第3个数明明在范围内,为什么输出不正确

修改如下,改动处见注释,供参考:

#include<stdio.h>
#define MAXSIZE 10

typedef struct {
    int elem[MAXSIZE];
    int length;
}sqlist;

void listdelete(sqlist &l,int i){
    for(int j=i;j<l.length;j++){
        l.elem[j-1]=l.elem[j];
        printf("111\n");
    }
    l.length--;
}

int main(){
    sqlist l;
    int n;
    //l.length=n;    移动到 n 输入语句后
    scanf("%d",&n) ;
    l.length=n;      //此句移动到这里
    for(int i=0;i<n;i++){
        scanf("%d",&l.elem[i]);
    }
    int i;
    scanf("%d",&i);

    printf("Before:(%d",l.elem[0]);
    for(int i=1;i<l.length;i++){ // for(int i=1;i<n;i++)
        printf(",%d",l.elem[i]);
    }
    printf(")\n");

    if(i<1||i>l.length){
        printf("Delete position error!");
    }
    else{
        listdelete(l,i);
        printf("After:(%d",l.elem[0]);
        for(int j=1;j<l.length;j++){
            printf(",%d",l.elem[j]);
        }
        printf(")");
    }
    return 0;
}

仅供参考,谢谢!

img

#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 10

typedef int ElemType;

typedef struct
{
    ElemType *elem;
    ElemType length;
    ElemType maxsize;
} SqList;

// 初始化线性表
void init(SqList * L)
{
    L->elem = malloc(sizeof(ElemType) * MAXSIZE);
    L->length = 0;
    L->maxsize = MAXSIZE;
    if (L->elem)
        printf("初始化成功!\n");
    else
        printf("初始化失败!\n");
}

int listdelete(SqList * L)
{
    int i;
    printf("请输入你要删除的元素所在位置:\n");
    getchar();
    scanf("%d", &i);
    if (L->length == 0)
    {
        printf("当前线性表为空\n");
        return 0;
    }
    if (i > L->length)
    {
        printf("超出当前元素个数!\n");
        return 0;
    }
    for (int j = i; j < L->length; j++)
    {
        L->elem[j - 1] = L->elem[j];
    }
    L->length--;
    printf("删除第%d个元素成功!\n", i);
    return 1;
}

int main(void)
{
    SqList L;
    int n;

    init(&L);

    scanf("%d", &n);
    if (n > 0 && n <= MAXSIZE)
        L.length = n;
    else
    {
        puts("超出线性表容量上限/下限");
        return -1;
    }

    // 按顺序插入数据
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &L.elem[i]);
    }

    printf("\n删除前:(");
    for (int i = 0; i < n; i++)
    {
        printf("%d:%d  ", i + 1, L.elem[i]);
    }
    printf(")\n");

    listdelete(&L);

    printf("\n删除后:(");
    for (int i = 0; i < L.length; i++)
    {
        printf("%d:%d  ", 1 + i, L.elem[i]);
    }
    printf(")\n");

    return 0;

}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^