单链表的实现
设计好的结构写在头文件里面。
可以将顺序表的头文件复制到单链表里面,将里面所有的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);