dfssdfdsdfd 2023-03-07 16:38 采纳率: 97.6%
浏览 36
已结题

一道数据结构的题有谁帮我看看

这是顺序表各个算法用C语言实现的代码,明天上完课以后大家对照书上的算法看看是如何用C语言实现的,然后将一个数据变成2个以上的结构体数据实现

https://blog.csdn.net/m0_63463510/article/details/125567286

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2023-03-07 16:40
    关注
    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    #define MAXLEN 100 //定义MAXLEN
    typedef struct _Data
    {
        int a;
        int b;
    }DataType;
    typedef struct
    {
        DataType data[MAXLEN];
        int Length;
    }SeqList;
     
     
    void InitList(SeqList* L)
    {
        L->Length = 0;
    }
    void CreateList(SeqList* L,int n)
    {
        int i = 0;
        for (i = 0; i < n; i++)
        {
            scanf("%d%d", &L->data[i].a,&L->data[i].b);
        }
        L->Length = i;
    }
     
    int GetElem(SeqList* L, int i, DataType* x)
    {
        if (i<1 || i>L->Length)
        {
            return 0;
        }
        else
        {
            *x = L->data[i - 1];
            return 1;
        }
    }
    int Locate(SeqList* L, DataType x)
    {
        int i = 0;
        while (i < L->Length && (L->data[i].a != x.a || L->data[i].b != x.b))
        {
            i++;
        }
        if (i > L->Length)
        {
            return 0;
        }
        else
        {
            return i + 1;
        }
    }
     
    int InsElem(SeqList* L, int i, DataType x)
    {
        int j = 0;
        if (L->Length >= MAXLEN)
        {
            printf("顺序表已满!");
            return -1;
        }
        if (i<1 || i>L->Length+1)
        {
            printf("插入位置出错");
            return 0;
        }
        if (i == L->Length + 1) //插入位置为表尾时
        {
            L->data[i - 1] = x;
            L->Length++;
            return 1;
        }
        for (j = L->Length - 1; j >= i - 1; j--)//插入位置为表中时
        {
            L->data[j + 1] = L->data[j];
        }
        L->data[i - 1] = x;
        L->Length++;
        return 1;
    }
     
    int DelElem(SeqList* L, int i, DataType* x)
    {
        int j = 0;
        if (L->Length == 0)
        {
            printf("顺序表为空");
            return 0;
        }
        if (i<1 || i>L->Length)
        {
            printf("不存在第i个元素");
            return 0;
        }
        *x = L->data[i - 1];
        for (j = 1; j < L->Length; j++)
        {
            L->data[j - 1] = L->data[j];
        }
        L->Length--;
        return 1;
    }
    void DispList(SeqList* L)
    {
        int i = 0;
        for (i = 0; i < L->Length; i++)
        {
            printf("%d,%d ", L->data[i].a,L->data[i].b);
        }
    }
    void  Menu()
    {
        printf("                  顺序表的各种操作\n");
        printf("==================================================\n");
        printf("|              1——建立顺序表                   |\n");
        printf("|              2——插入元素                     |\n");
        printf("|              3——删除元素                     |\n");
        printf("|              4——按位置查找元素               |\n");
        printf("|              5——按元素值查找其在表中位置     |\n");
        printf("|              6——求顺序表的长度               |\n");
        printf("|              0——返回                         |\n");
        printf("==================================================\n");
        printf("请输入菜单号(0-6):");
    }
    int main()
    {
        SeqList L;
        DataType x;
        int n, i, loc;
        char  ch1, ch2, a;
        ch1 = 'y';
        while (ch1 == 'y' || ch1 == 'Y')
        {
            Menu();
            scanf("%c", &ch2);
            getchar();
            switch (ch2)
            {
            case  '1':
                InitList(&L);
                printf("请输入建立线性表的个数:");
                scanf("%d", &n);
                CreateList(&L, n);
                printf("建立的线性表为:");
                DispList(&L);
                break;
            case  '2':
                printf("请输入要插入的位置:");
                scanf("%d", &i);
                printf("请输入要插入的元素值:");
                scanf("%d%d", &x.a,&x.b);
                if (InsElem(&L, i, x))
                {
                    printf("已成功在第%d的位置上插入%d,插入后的线性表为:\n", i, x);
                    DispList(&L);
                }
                else
                    printf("输入插入的参数错误!");
                break;
            case  '3':
                printf("请输入要删除元素的位置:");
                scanf("%d", &i);
                if (DelElem(&L, i, &x))
                {
                    printf("已成功在第%d的位置上删除(%d,%d),删除后的线性表为:\n", i, x.a,x.b);
                    DispList(&L);
                }
                else
                    printf("\n输入删除的参数错误!");
                break;
            case  '4':
                printf("请输入要查看表中元素位置(从1开始):");
                scanf("%d", &i);
                if (GetElem(&L, i, &x))
                    printf("当前线性表第%d个元素的值为:(%d,%d)", i, x.a,x.b);
                else
                    printf("输入的位置错误!");
                break;
            case  '5':
                printf("请输入要查找的元素值为:");
                scanf("%d%d", &x.a,&x.b);
                loc = Locate(&L, x);
                if (loc)
                    printf("查找元素值为(%d,%d)的位置为:%d", x.a,x.b, loc);
                else
                    printf("该表中无此元素!");
                break;
            case  '6':
                printf("当前线性表的长度为:%d", L.Length);
                break;
            case  '0':
                ch1 = 'n'; 
                break;
            default:
                printf("输入有误,请输入0-4进行选择!");
            }
            if (ch2 != '0')
            {
                printf("\n按回车键继续,按任意键返回主菜单!\n");
                a = getchar();
                if (a != '\xA')
                {
                    getchar(); ch1 = 'n';
                }
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程