首页 > 其他分享 >C语言动态链表练习(简单易懂)

C语言动态链表练习(简单易懂)

时间:2024-03-18 17:32:34浏览次数:29  
标签:abcd head struct C语言 链表 易懂 new1 结构

学习目标:

初步认识动态链表,并会最基础的应用。


题目内容:

写个程序,输入a,b,c
如果a>b,a=a➖b
       b>c,b=b➖c
        c>a,c=c➖a
要求:开始时输入k➕1行数,第一行为k,代表数的组数,下面每一行为一个组,每组四个数,前三个为a,b,c,最后一个为这组数进行上述计算的次数


题目特点分析:

开始时输入的k值不确定,不能直接定义一个数组。程序中数据所占空间与未知数k相关,因此需要动态开辟空间。


技术分析:

何为链表:

创建一个结构体,让该结构体里面含有结构体指针变量,该指针变量指向下一个结构体,进而使一个结构体后面连着另一个结构体......从而形成链表。就像一个车厢拉着另一个,连成一长串。

何为动态链表:

普用静态链表所占空间是确定的,也就是说结构体的数量是确定的。但动态链表引用malloc函数,能够开辟空间,这样就能再为新增的结构体开辟位置。

本题中就需要k个结构体,结构体的数量是不定的,所以需要用到动态链表。

题目书写

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

struct abcd
{
    int a, b, c, d;
    struct abcd* next;
};

int main()
{
    struct abcd* head = (struct abcd*)malloc(sizeof(struct abcd));
    struct abcd* tail = head;
    head->a = 4; head->b = 3; head->c = 2; head->d = 1; head->next = NULL;
    int i, k;
    printf("请输入");
    scanf_s("%d", &k);
    while (k)
    {
        k--;
        struct abcd* new1 = (struct abcd*)malloc(sizeof(struct abcd));
        scanf_s("%d %d %d", &(new1->a), &(new1->b), &(new1->c));
        i = 0;
        while (new1->a > new1->b || new1->b > new1->c)
        {
            i++;
            if (new1->a > new1->b)
                new1->a -= new1->b;
            if (new1->b > new1->c)
                new1->b -= new1->c;
        }
        new1->d = i;
        new1->next = NULL;
        tail->next = new1;
        tail = new1;
    }
    while (head->next != NULL)
    {
        head = head->next;
        printf("%d %d %d %d\n", head->a, head->b, head->c, head->d);
    }
    return 0;
}

题目讲解:

首先malloc函数在stdlib头文件中。

然后创建结构体,结构体里面含有结构体指针,为了指向下一个结构体。

在链表里边开头的结构体位置非常重要,当你知道开头的位置,你就可以一步步推出后面所有内容。我写的这个head结构体里面的内容是随便填写的,而且下面也没有输出,单纯就是为了标记链表表头的位置。

 struct abcd* new1 = (struct abcd*)malloc(sizeof(struct abcd));这一句是动态链表的关键,这个new1就是接收我们传入的那k行数字的结构体,接收后,再把new1位置放到tail后边.....

最后就是输出数据,我们的练习题就做完啦!

小结:

希望通过这个简单的例子,大家能学到动态链表的使用。有问题和建议的,欢迎评论区留言,有修改意见的,欢迎私信我,一起进步啦!

标签:abcd,head,struct,C语言,链表,易懂,new1,结构
From: https://blog.csdn.net/2301_81033986/article/details/136814197

相关文章

  • 使用vscode编辑c语言
    在VisualStudioCode(VSCode)中配置C语言环境步骤指南:一,前期准备(安装扩展,软件包)安装C/C++扩展打开VSCode。点击左侧边栏的扩展按钮(或使用快捷键Ctrl+Shift+X)。在搜索框中输入C/C++。从结果中找到Microsoft的C/C++扩展并点击“安装”。安装MinGW或......
  • 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围:0≤n≤1000要求:空间复杂度O(1),时间复杂度O(n),如当输入链表{1,2,3}时,经反转,原链表变为{3,2,1},所以对应输出为{3,2,1}.以上转换过程如下图所示:实......
  • C语言指针完整总结!!!
    1.指针介绍1.简介:C语⾔中给地址起了新的名字叫:指针。一个内存单元是一字节内存单元的编号==地址==指针在x86的环境中,一共有32根地址总线,即32个比特位。一个字节有八个比特位,而⼀个比特位可以存储⼀个2进制的位1或者0,因此32根地址线,就能表示2^32种含义,每⼀种含义都......
  • #c语言程序设计————实验报告
    实验项目名称:实验一熟悉C语言运行环境实验项目类型:验证性实验日期:2023年3月14日一、实验目的下载安装Devc6.0程序。了解在该系统上如何进行编辑、编译、连接和运行一个C程序。通过运行简单的C程序了解C程序的特点。二、实验硬、软件环境Windows计算机、Devc6.0三、......
  • [Java·算法·中等] LeetCode21. 合并两个有序链表
    人不走空                                          ......
  • C语言自定义类型:枚举(C语言进阶)
    目录前言1、枚举类型定义2、枚举的优点3、枚举的使用结语前言    本篇文章讲解C语言自定义类型:枚举类型。    枚举顾名思义就是一一列举,把可能的值一一列举。像一周的周一到周日可以枚举;每年12个月,可以枚举。1、枚举类型定义enumDay//星期{ Mo......
  • C语言最重要的知识点(6)
    第六章指针变量的本质是用来放地址,而一般的变量是放数值的。1、int *p中  *p和p的差别:简单说*p是数值,p是地址!*p可以当做变量来用;*的作用是取后面地址p里面的数值 p是当作地址来使用。可以用在scanf函数中:scanf(“%d”,p);2、*p++和(*p)++的之间的差别:改错题目中很重要......
  • C语言:渣女\0与被它区别对待的兄弟俩字符串与字符
    虽然这个拟人手法用的挺那啥,但是我觉得还挺贴切的。你觉得呢?欢迎浏览后发表自己的看法!目录一、字符(一)概念(二)实际操作二、字符串     (一)概念(二)实际操作三、\0对字符串特殊照顾,但对字符就不太行了四、小结一、字符(一)概念        其实字符理解起......
  • C语言:爱跳舞的转义字符——旋转,跳跃,我闭着眼
    转义字符,顾名思义:原来意思被转变的字符。比如0和\0。前者就是数字0,而后者被\这个符号垫起来后,就成了字符串的结束标志,代表没有内容。就好像\0在说:“旋转、跳跃我闭着眼,我已不在乎自己是个数字0。”目录一、概念二、一些常见的转义字符——让我们一起欣赏一场舞会盛宴......
  • c语言编程题
    1.密码破译要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、......