删除非递减顺序表中多余的相同元素(c语言)

不知道怎么改才对了
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef int DataType;
typedef struct
{
DataType list[10];
int length;
}Sqlist;

Sqlist* init_Sqlist()
{
Sqlist* L;
L = malloc(sizeof(Sqlist));
L->length = -1;
return L;
}

void Create_Sqlist(Sqlist* L, int n)
{
int i;
printf("请给顺序表赋值:\n");
for (i = 1; i <= n; i++)
{
scanf_s("%d", &L->list[i]);
}
L->length = n;//有效的元素为n个
}

void Print_Sqlist(Sqlist* L) {
int i;
for (i = 1; i <= L->length; i++)
printf("%d ", L->list[i]);
printf("\n");
}

void DeleteList(Sqlist* L)
{
for (int i = 0; i < L->length; i++)
for (int k = i + 1; k < L->length; k++)
if (L->list[i] == L->list[k])
{
DeleteList(L, k);
k--;
}
}

void main()
{
int x = 0;
Sqlist* L;
L = init_Sqlist();
Create_Sqlist(L, 10);
printf("输出赋值后的顺序表:\n");
Print_Sqlist(L);
DeleteList(L);
printf("\n输出删除后的顺序表:\n");
Print_Sqlist(L);
}

img

添加了注释,如有帮组希望采纳,谢谢


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

typedef int DataType;
typedef struct
{
    DataType list[10];
    int length;
} Sqlist;

Sqlist *init_Sqlist()
{
    Sqlist *L;
    L = (Sqlist *)malloc(sizeof(Sqlist));
    L->length = -1;
    return L;
}

void Create_Sqlist(Sqlist *L, int n)
{
    int i;
    printf("请给顺序表赋值:\n");
    for (i = 0; i < n; i++) // 你的删除操作是从下标0开始的,所以这里也要从0开始
    {
        scanf("%d", &L->list[i]);
    }
    L->length = n; //有效的元素为n个
}

void Print_Sqlist(Sqlist *L)
{
    int i;
    for (i = 0; i < L->length; i++) // 你的删除操作是从下标0开始的,所以这里也要从0开始
        printf("%d ", L->list[i]);
    printf("\n");
}

void DeleteList(Sqlist *L)
{
    for (int i = 0; i < L->length; i++) //就是说的这里
        for (int k = i + 1; k < L->length; k++)
            if (L->list[i] == L->list[k])
            {
                for (int j = k; j < L->length; j++) // 删除重复元素,这里的j是从k开始的,元素往前移动就是删除
                    L->list[j] = L->list[j + 1];
                L->length--; // 删除后长度减一
                k--;         // 删除后k也要减一,因为删除了一个元素,后面的元素要往前移动一位
            }
}

int main()
{
    int x = 0;
    Sqlist *L;
    L = init_Sqlist();
    Create_Sqlist(L, 10);
    printf("输出赋值后的顺序表:\n");
    Print_Sqlist(L);
    DeleteList(L);
    printf("\n输出删除后的顺序表:\n");
    Print_Sqlist(L);

    return 0;
}