链表存储

Posted webcyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表存储相关的知识,希望对你有一定的参考价值。

链表存储分为:单链表 、 双链表

单链表:带头结点、不带头结点

一个节结点包含两部分:值域和指针域指针指向后继结点 用于保存逻辑关系           

尾结点可以指向头结点(循环单链表)或者设置为NULL(非循环单链表) 头结点值域通常不包含任何东西

 

单链表结点类型如下:

typedef struct node

    ElemType data;

   struct node *next;

SLinks;

 

这里不可以将struct nide *next 改为  struct node next;因为SLinks声明是递归的,C++不允许类型递归声明,这样无法分配内存大小 ,如果是指针,其大小是确定的指针保存的是结点地址

*next = (SLinks *)malloc(sizeof(SLinks));malloc函数返回内存地址 再次将其转换为 SLinks *类型 这是动态分配的内存需要使用free函数释放内存

技术图片

 

 扩展知识

int a=10;
int p=a;
这种情况,p与a是不同的变量,这里是将a的值赋给p
int &p=a;
即 p是a 的别名,p和a其实是同一个整形变量,两个占用同一块内存空间,如果有 p=15;那么a也是15,修改p与修改a是完全等价的

那么
int *a;
int * &p=a;
很容易理解,把 int * 看成一个类型,a就是一个整型指针,p 是a的别名

解引用

  大家都知道在写int *p 时,*可以声明一个指针。很少人知道*在C/C++中还有一个名字就是“解引用”。他的意思就是解释引用,说的通俗一点就是,直接去寻找指针所指的地址里面的内容

 

基本算法:

初始化链表、销毁链表、求链表长度、求链表中第i个元素、按值查找元素位置、插入元素运算算法、删除元素、输出链表全部元素

 

以上是关于链表存储的主要内容,如果未能解决你的问题,请参考以下文章

算法2---链表2---链表任意存储的实现

线性表的链式存储结构(链表)

002-链表

什么是链表?

线性表--03---链表----单向链表双向链表

2 线性表——链表