有没有人知道代码怎么改才能实现这个程序呢

img


#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 101
typedef int ElemType;
typedef struct{
ElemType elem[MAXSIZE];
int length;
}SqList;

void InitList(SqList &L);//构建顺序表L
bool ListDelete(SqList &L,int i);//删除顺序表L中的第i个元素

int main()
{
SqList L;
InitList(L);
int i;

scanf("%d",&i);
bool result = ListDelete(L,i);
if(result==false){//删除失败
    printf("Delete Error.The value of i is illegal!\n");
}else if(result==true){//删除成功
    printf("Delete Success.The elements of the SequenceList L are:\n");

for(int j=0; j<L.length; j++){
        printf(" %d",L.elem[j]);
    }
}
return 0;

}
void InitList(SqList &L)
{
ElemType e;
int i=0;
L.length=0;
scanf("%d",&e);
while(e!=-1)
{
L.elem[i++]=e;
L.length++;
scanf("%d",&e);
}
}

bool ListDelete(SqList &L,int i)
{//请完成本函数的功能,删除L中的第i个元素,删除失败返回false,否则返回true

}

实现思路:删除指定位置元素后,后面元素要都对应前移,即:
L.elem[j] = L.elem[j+1];
移动完成后数组长度减1.
bool ListDelete(SqList &L,int i)函数实现如下:

bool ListDelete(SqList &L,int i)
{
    int j = 0;
    if(i < 0 || i > L.length)
    {
        return false;
    }
    
    for(j = i-1;j < L.length-1;j++)
    {
        L.elem[j] = L.elem[j+1];
    }
    L.length--;
    
    return true;
}

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType; //元素值域类型为int型

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;

void Create(LinkList &L);                 //正序构建单链表,返回其头指针
void del_x_list(LinkList &L, ElemType x); //删除所有值下标为x的结点
void print(LinkList L);                   //输出链表元素

int main()
{
    LinkList L;
    int x;
    Create(L);
    printf("输入要删除的数的位置:");
    scanf("%d", &x);
    del_x_list(L, x);
    print(L);
    return 0;
}

void Create(LinkList &L)
{
    L = (LinkList)malloc(sizeof(LNode));
    //r始终指向尾结点,初始指向L,即头结点
    LNode *r = L;
    LNode *s;
    int size;
    scanf("%d", &size);
    for (int i = 1; i <= size; i++)
    {
        s = (LinkList)malloc(sizeof(LNode));
        int x;
        scanf("%d", &x);
        s->data = x;
        r->next = s;
        r = s;
    }
    r->next = NULL;
}
void del_x_list(LinkList &L, int index)
{
    int j = 0;
    LNode *p = L->next, *pre = L, *tmpNode;
    if (index <= 0)
        return;
    //循环条件:p不为空
    //若为NULL说明已遍历完成
    while (p)
    {
        j++;
        if (j < index)
        {
            pre = pre->next;
            p = p->next;
        }
        else if (j == index)
        {
            tmpNode = p; //tmpNode指向该结点
            p = p->next;
            pre->next = p; //删除*tmpNode结点
            free(tmpNode); //释放*tmpNode结点
        }
        else
        {
            break;
        }
    }
}

void print(LinkList L)
{
    //输出链表元素值,每个值后输出一个空格
    LinkList p = L->next;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}