兔子不恰胡萝卜 2022-03-09 13:27 采纳率: 75%
浏览 99
已结题

删除非递减顺序表中多余的相同元素(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);
}

  • 写回答

1条回答 默认 最新

  • 熬了夜的程序员 成都裕泰晟通科技有限公司官方账号 2022-03-09 14:20
    关注

    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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月16日
  • 已采纳回答 3月10日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 虚心请教几个问题,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab