单链表-乡巴老也能看懂

来源:互联网 发布:linux gcc编译器简介 编辑:程序博客网 时间:2024/06/06 18:24

单链表-乡巴老也能看懂

链表
链表是一种物理存储单元上非连续非顺序的存储结构数据元素的逻辑
  顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中没一个
   元素成为节点) 组成,节点可以在运行时动态生成。每个节点包括两个部分;
  一个时存储数据元素的数据域,另一个时存储下一个节点地址的指针域。
相比较的数组,链表结构与之有如下区别:
(1) 数组通常在创建的时候就需要设定数据的大小,使用链表结构可以
克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空
间,实现灵活的内存动态管理:
      (2) 链表由于增加了节点的指针域,空间开销比较大
      (3) 在中间插入或删除元素(节点)时,链表非常的灵活不需要移动
其他元素(节点)的位置:
      (4) 数组可以随机存储数据 , 但是链表不允许随机存取。

链表 (由多个节点组成,分散存储 由指针链接起来呢,)
节点组成(两部分:1数据域 2.指针域-存储下一个节点的指针)
节点1 节点2 节点3 节点4
数据  指针域 数据  指针域 数据  指针域 数据  指针域
 指向节点2 指向节点3 指向节点4  指向NULL
插入节点
节点1要插入节点
数据   指针域数据   指针域
直线新的节点            指针指向要插入位置后面节点的地址
最后他们组成了一个新的链表


方式1  头指针       头指针指向第一个数据节点
   head     =   NULL      需要判断 是否为空
方式2  头节点
   头节点   数据不使用     指针指向



//结构的数据类型typedf struct Node{int data;struct Node*next;}Node;//链表类型typedef struct List{Node *head;}List;//1创建节点Noode* CreateNode (int data){Node *PtrNode = malloc(sizeof(Node));PtrNode->data = data;PtrNode->next = NULL;return PtrNode;}//2向头结点位置插入新结点、void PushHead(List *list , int data){Node*PtrNew = CreateNode(data); //PtrNew->next =list->head;//如果链表有节点list->head = PtrNew ;//如果链表中无节点}//遍历链表void tralve (List *list){printf("链表中的元素");Node *PtrHead= list->head;//操作是指针指向可以发生变化if(!PtrHead){put("空");}while(PtrHead){printf("%d",PtrHead->data);PtrHead = PtrHead->next;}printf("\n");}//4 计算结点个数int length(List *list){int count =0;Node *PtrHead = list ->head;while(PtrHead){count++;PtrHead = PtrHead ->next;}}int main(){List list;list.head = NULL;//头指针PushHead(&list,1);tralve(&list);PushHead(&list,2);tralve(&list);PushHead(&list,3);tralve(&list);printf("length = %d\n",length(&list));return 0;}


原创粉丝点击