zoukankan      html  css  js  c++  java
  • C语言编程学习:链表的来源分析

    C语言是面向过程的,而C++是面向对象的

    C和C++的区别:

    C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

    C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

    C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

    C语言中的链表是重点,也是难点,而且意义非凡。对链表的的抽象和恐惧是源于对它的来龙去脉的不明白。所以很有必要对它的发展渊源做透彻分析。

    链表的单位是节点,而节点源于复合数据类型:结构体;

    节点和结构体的区别就是看是否有指针域,目的就是想找到下一个节点;

    结构体形如:

    struct Ghost

    {

    char name[30];

    int age;

    int height;

    char addr[30];

    };

    节点形如:

    struct Ghost

    {

    char name[30];

    int age;

    int height;

    char addr[30];

    struct Ghost *next;

    };

    现在来看一下创建1个节点的情况:

    小编推荐一个学C语言/C++的学习裙【 七三零,一三零,二二一 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    效果如下:

    那么申请多个节点呢?如3个。

    核心代码如下:

    //堆中申请变量

    struct Ghost *g1 = (struct Ghost*)malloc(sizeof(struct Ghost));

    struct Ghost *g2 = (struct Ghost*)malloc(sizeof(struct Ghost));

    struct Ghost *g3 = (struct Ghost*)malloc(sizeof(struct Ghost));

    //赋值

    strcpy(g1->name, "聂小倩");

    g1->age = 22;

    g1->height = 165;

    strcpy(g1->addr, "兰若寺");

    g1->next = NULL;

    //赋值

    strcpy(g2->name, "付清风");

    g2->age = 23;

    g2->height = 166;

    strcpy(g2->addr, "十里亭");

    g2->next = NULL;

    //赋值

    strcpy(g3->name, "东方不败");

    g3->age = 24;

    g3->height = 167;

    strcpy(g3->addr, "黑木崖");

    g3->next = NULL;

    //遍历

    printf("姓名:%s ", g1->name);

    printf("年龄:%d ", g1->age);

    printf("身高:%d ", g1->height);

    printf("地址:%s ", g1->addr);

    //遍历

    printf("姓名:%s ", g2->name);

    printf("年龄:%d ", g2->age);

    printf("身高:%d ", g2->height);

    printf("地址:%s ", g2->addr);

    //遍历

    printf("姓名:%s ", g3->name);

    printf("年龄:%d ", g3->age);

    printf("身高:%d ", g3->height);

    printf("地址:%s ", g3->addr);

    效果图:

    小编推荐一个学C语言/C++的学习裙【 七三零,一三零,二二一 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    成功是成功了,但这很原始,可以改进的:借助成员指针的力量自动去找下一个,让链起来!

    对赋值做改动:

    那么遍历就可以改进了:

    效果:

    小编推荐一个学C语言/C++的学习裙【 七三零,一三零,二二一 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    这样,我只要知道第1个节点的位置,后面的就可以一股脑的扯出来。这就是链表。

    特点:链表是一连串节点链起来的,是线性特点。只要拿第1个节点,就可以把一堆的节点都找到。就像贪吃蛇一样,蛇头走到哪里,蛇身和蛇尾就跟到哪里。

    和数组类似,数组的第1个元素的首地址就是数组的地址;链表的第1个节点的地址就是链表的首地址;

    接下来就可以封装出操作链表的函数了,如:遍历链表,添加节点,删除节点,统计节点。

    这些是C/C++能做的

    服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

  • 相关阅读:
    前端css实现最基本的时间轴
    前端css实现最基本的时间轴
    那些年遇见的奇葩编程书籍封面
    那些年遇见的奇葩编程书籍封面
    2018年国内就业薪资高的7大编程语言排行
    乡愁
    乡愁
    微光系列之青春无敌美少女
    1287 矩阵乘法
    一些关于DP的知识
  • 原文地址:https://www.cnblogs.com/xiaochen520/p/9163852.html
Copyright © 2011-2022 走看看