数据结构------链表总结
1.链表
链表是一种物理存储单元上非连续非顺序的存储结构。数据元素的逻辑顺序是通过指针连接完成的。
2.结点
链表的每个元素称为节点,节点由数据域和指针域组成。
3.增加元素
链表增加元素操作,有头插法和尾插法,无论头尾插法怎么使用,在链表结构内添加个指针指向头或尾元素,这样能方便操作插入新数据元素。
(1)头插法
(2)尾插法
4.删除元素
(1)必须遍历链表找到数据元素节点
(2)再把要删除元素的前一个节点的下一个指针指向要删除元素的下一个节点的指针(注意末尾删除问题)
(3)释放要删除元素的空间
5.修改元素
(1)查找到要修改元素的节点
(2)更改数据
6.查找元素
(1)查找到要查找元素的节点
(2)返回数据
7.链表总结:
(1)单链表
-----数据域和一个指针域组成,靠指针连接成链,即只有后驱,最后一个节点指针域为空
节点结构如下:
//链表节点
struct ListNode
{
void* pData; //要存储的数据
ListNode* pNext; //指向下一个节点
};
(2)双链表
-----数据域和两个指针域组成,靠指针连接成链,即有前后驱
-----首节点前驱指针为空,尾节点后驱指针为空,
节点结构如下:
//链表节点
struct ListNode
{
void* pData; //要存储的数据
ListNode* pPre; //指向前一个节点
ListNode* pNext; //指向下一个节点
};
(3)循环链表
-----数据域和两个指针域组成,靠指针连接成链,即有前后驱
-----首节点前驱指针指向最后一个节点,尾节点后驱指针指向首节点
节点结构如下:
//链表节点
struct ListNode
{
void* pData; //要存储的数据
ListNode* pPre; //指向前一个节点
ListNode* pNext; //指向下一个节点
};
(4)静态链表
-----利用数组结构完成的链表
节点结构如下:
//////////////////////////////////////////////////////////////////////////
//1.将一维数组ArrayList当做链表
//////////////////////////////////////////////////////////////////////////
#define MAXSIZE 100
typedef struct
{
void* data; //数据
int Cur; //游标
}Node,ArrayList[MAXSIZE];