数据结构论坛

首页 » 分类 » 常识 » 数据结构图解链表c语言版
TUhjnbcbe - 2024/8/14 16:56:00

首先我们来看一下链表的概念

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。

首先我们来讨论一下单链表,通过任意的存储单元来存储线性表的数据元素,即每个节点由一个数据元素以及下个节点的指针组成。

首先我们对数据以及节点的类型做一个描述,我们直接上代码:

我们先创建一个头文件Linklist.h来做对数据的描述

#ifndef_Linklist#define_Linklist#includestdio.h#includestdlib.htypedefintElemType;typedefstructLNode{ElemTypedata;structLNode*next;}LNode;#endif

我们接下来讲链表的基础操作,链表的建立

头插法建立链表

头插法我们可以从一个空表开始,生成一个新结点,将数据存放到新界中,让后将该结点插入链表表头,上代码

voidList_HeadInsert(LNode**root,ElemTypedata){  LNode*node=*root;  if((*root)==NULL)  {    (*root)=(LNode*)calloc(1,sizeof(LNode));    assert((*root));    (*root)-data=data;  }  else{    LNode*item=calloc(1,sizeof(LNode));    assert(item);    item-data=data;    item-next=node;    (*root)=item;  }}

尾插法建立链表

该方法是将新结点插入到链表的表尾,即生成一个新节点,将新节点赋值给最后一个结点的next,上代码

voidList_TailInsert(LNode**root,ElemTypedata){  LNode*node=*root;  if((*root)==NULL)  {    (*root)=(LNode*)calloc(1,sizeof(LNode));    assert((*root));    (*root)-data=data;  }  else{    while(true)    {      if(node-next==NULL)      {        LNode*item=calloc(1,sizeof(LNode));        assert(item);        item-data=data;        node-next=item;        break;      }      node=node-next;    }  }}

我们来测试一下代码

voidmain(){  LNode*node=NULL;  LNode*node1=NULL;  List_TailInsert(node,1);  List_TailInsert(node,2);  //这里我们将node的地址传入给函数,所以我们函数就是修改的值  List_HeadInsert(node1,1);  List_HeadInsert(node1,2);  printf("%d",node-next-data);  printf("%d",node1-data);}//这里我们的输出都为2

1
查看完整版本: 数据结构图解链表c语言版