链表存储
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个元素、按值查找元素位置、插入元素运算算法、删除元素、输出链表全部元素
以上是关于链表存储的主要内容,如果未能解决你的问题,请参考以下文章