单链表的实现
设计好的结构写在头文件里面。
可以将顺序表的头文件复制到单链表里面,将里面所有的DPSQList替换为List,所有的PS替换为plist,所有顺序表替换为链表。
也就是DPSQList PS换为List plist。顺序表PS换为链表plist。
单链表比较于顺序表,多了个插入中的,在插入函数前的头插和尾插。
在查找key值前面加一个,获取数据结点的个数,也就是获取有效数据的个数。
在链表里面的结点的地址 作用相当于顺序表中的下标,所以其查找的返回类型为Node*。
返回前驱回后继的数据的地址也同理。
-
- typedef struct Node
- {
- int data;//结点中的数据域
- struct Node* next;//指向后继数据地址的指针
-
- }Node,*List;//List==*Node
-
-
- //链表的基本实现操作(常用的),应用操作一般不放在这里面
-
- //可以将链表的复制过来
-
- //初始化
- void InitList(List plsit);//Init:初始化。DplsitQList为链表结构体指针数据类型+其定义 的变量,名字为plsit
-
- //头插(插入在头结点后面的第一个有效数据的位置上)
- bool Insert_head(List plist,int val);
-
- //尾插
- bool Insert_tail(List plist, int val);
-
-
-
- //插入数据,在链表plsit的pos位置插入val数据元素
- //插入操作有2种结果,插入成功或失败,所以其插入函数原型是bool类型,只返回2种结果
- bool Insert(List plsit, int pos, int val);//参数就是实现这个函数的使用需要外界提供给它的数据东西
-
- //判空(判断链表是否为空)
- bool IsEmpty(List plsit);
-
- //获取数据结点的个数
- int Getlength(List plsit);
-
- //在链表plsit中 查找第一个key值,找到返回key值的结点地址,没有找到返回空NULL
- //所以其查找的返回类型为Node*
- Node* Search(List plsit, int key);
- //删除链表plsit中pos位置的值,删除跟插入一样成功或失败2种结果
- bool DelPos(List plsit, int pos);
-
- //删除第一个val的值
- bool DelVal(List plsit, int val);
-
- //返回key的前驱地址,如果不存在(key无前驱,在表头)返回NULL
- int GetPrio(List plsit, int key);
-
- //返回key的后继下标,如果不存在(key无后继,在表尾)返回NULL
- Node* GetNext(List plsit, int key);
- //输出链表,不是对链表内部的操作,但为了展示我们对链表的操作是否正确,有时要输出看一下
- void Show(List plsit);
-
- //清空链表中的数据
- void Clear(List plsit);
-
- //销毁整个链表内存(交回)
- void Destroy(List plsit);