链表原理理解

链表作为一种线性数据,通过前后节点的指针指向,将所有数据串联起来。为了实现链表数据域的整体耦合,需要额外的指针域来标定前后数据的连接。通过下面的链表结构图,可以非常容易的理解链表的组成结构


头节点作为链表,不设定数据域,而其他节点则由数据域域指针域组合而成

C语言对于链表的代码的实现

1,创建结构体并命名

创建链表前需要先创建结构体作为节点和头指针:

typedef struct Node  //typedef方法函数可以对于struct Node进行重命名
{int i;struct Node* next;}LNode,*LinkList;  //定义一个结构体指针方便后续的操作

2,链表初始化

通过创建空数据域作为头节点来创建一个指针

LinkList InitList()
{LinkList L=(LNode *)malloc(sizeof(LNode));   //为头结点动态分配内存L->next=NULL;  //初始化时头结点指向空return L;
}

3,求链表的长度

程序操作步骤为:

  • 定义一个空指针指向链表的头节点,并根据链表节点的指向移动该指针,直到该指针指向空节点时停止

  • 定义int字段标记链表长度,在申请的指针移动时累加记录并最后返回结果

int GetListLength(LinkList L)
{int listlength=0;LNode *p=L->next;while(p){listlength++;p= p->next;}return listlength;
}

4,初始链表添加值

对于空链表添加值,有头插法和尾插法

头插法:

void HeadInsertList(LinkList L,int data)
{scanf("%d",&data);LNode *p=(LinkList)malloc(sizeof(LNode));p->i=data;p->next=L->next;L->next=p;
}

头插法插入数据逻辑简单,但是插入数据与在链表中的排序顺序相反

尾插法

void EndInsertList(LinkList L,int data)
{LNode *End;End=L;    while(End->next){End=End->next;       }    LNode *p=(LinkList)malloc(sizeof(LNode));p->i=data;End->next=p;p->best=NULL;
}

尾插法相对于头插法来说,数据的插入顺序与在链表中的数据顺序时一致的

5,实现链表的遍历输出

void  TraverList(LinkList L)
{LNode *p=L->next;while(p)   //由于最后的节点指向空,可以通过这一特点结束遍历{printf("%d ",p->i);p=p->next;}
}

总结

上面就是链表的创建中的一些流程,可以 使用这些方法去做自己的链表哟

C语言来实现链表创建相关推荐

  1. C语言的单链表创建:头插法/尾插法

    文章目录 前言 链表头插法 链表尾插法 源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了. 链表数据 ...

  2. C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)

    http://blog.csdn.net/xiaofeige567/article/details/27484137 C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表) ...

  3. c语言实现单链表的创建(完整版)

    使用c语言实现单链表是考研的重点.但是如何实现却是一个难点.下面是我写的一个简单的创建单链表的代码. #include<stdio.h> #include<stdlib.h> ...

  4. C语言单链表创建(基础)

    最近在刷题重温C语言的基础知识.关于单链表的创建还有一些不懂,参考了网上的代码,做一下笔记. 1.单链表的创建与赋值 #include <stdio.h> #include <std ...

  5. C语言 链表创建及操作

    C语言 链表创建及操作 第一部分构建链表,定义结构体,分别用头插法.尾插法实现,这里封装了打印函数:printf();做练习方便后续使用:对链表进行查找,并将查找到的值构建一个新的链表:链表的转置:具 ...

  6. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  7. 用链表c语言程序设计,C语言程序设计-基于链表的学生成绩管理系统

    <C语言程序设计-基于链表的学生成绩管理系统>由会员分享,可在线阅读,更多相关<C语言程序设计-基于链表的学生成绩管理系统(18页珍藏版)>请在人人文库网上搜索. 1.华北科技 ...

  8. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  9. (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作

    http://blog.csdn.net/fisherwan/article/details/25557545 前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了, ...

  10. c语言实现可变单链表,c语言实现单链表

    c语言实现单链表 c语言实现单链表 定义 创建 销毁 清空 打印 获取长度 查询 删除第pos个结点 在第pos插入结点 定义 首先来看一看单链表的定义(看看百度的) 单链表是一种链式存取的数据结构, ...

最新文章

  1. 关于webpack的使用
  2. 20180925-4 单元测试,结对
  3. 创建一个HTML文件
  4. HuggingFace BERT源码详解:基本模型组件实现
  5. 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。
  6. SQL Server查询语句
  7. int与byte互转
  8. 怎样写好一篇高质量的技术文章?
  9. Windows 域基础环境搭建-Win_Server_2003
  10. rtsp开源视频播放器VideoLAN
  11. PTA 天梯赛的善良(20分)[C语言]
  12. 数据结构笔记(持续更新)
  13. 互联网的那点事:商业模式、开放平台、开放开源标准
  14. 最新计算机cpu简介,计算机cpu的类型是什么?计算机CPU分类简介
  15. node中的__dirname
  16. Lucene Query Parser Syntax
  17. 利用JPCT-AE在安卓设备上进行*.obj文件的加载和显示
  18. C语言 字符串1234转换成数字1234
  19. 运筹说 第26期 | 2022泰晤士世界大学排名出炉!中国八校首次上榜,快看有没有你学校!
  20. 管理之道(十八) - 跳起来够得着的目标才算完美

热门文章

  1. 企业微信api接口调用-通过手机号或微信好友添加客户
  2. 大数据高级开发工程师——大数据相关工具之三 Maxwell
  3. 读书笔记|《金字塔原理》第三章
  4. STM32的ucgui移植
  5. Itext对pdf模板进行电子签名
  6. lbochs模拟器最新版_Bochs模拟器
  7. matlab 编写雷达波形,雷达信号处理+Matlab程序
  8. Android 自定义标尺滑动选择值
  9. 文字转语音真人发声app哪个好用?几个好用的手机文字转语音软件
  10. Spring Boot 的 JSON RPC(客户端示例) - briandilley/jsonrpc4j Wiki