不知道怎么改才对了
#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);
}
添加了注释,如有帮组希望采纳,谢谢
#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;
}