链表
单链表
链表的每一个节点中只包含一个指针域
头指针和头结点
头指针:链表中第一个节点的存储位置
头结点:在单链表的第一个结点前附设的一个结点
单链表的读取数据元素
- 获得第 i 个节点的数据
声明第一个节点指针p指向链表的第一个结点a1,初始化 j 从1开始
当 j < i 时,遍历链表,让 p 的指针向后移动,不断指向下一个结点, j 累加1
当链表末尾 p 为空,则说明第 i 个元素不存在;否则查找成功,返回 p 的结点数据
单链表的插入数据元素
- 在第 i 个节点之后插入数据元素
创建一个空结点,分配内存空间,设置元素数据
获取第 i 个结点,设置新节点的后继结点为该结点的后继结点
设置第 i 个结点的后继节点为新结点
void insertLinklist(Linklist * linklist,int pos,ElementType element)
//在指定的位置pos插入元素element
{
//创建空节点并为数据域赋值
Node * node = (Node*)malloc(sizeof(Node));
node ->data = element;
node->next = NULL;
//找到要插入的位置的结点
if(pos == 1)
{
node->next = linklist->next;
linklist->next = node;
linklist->length++;
return;
}
Node *currNode = linklist->next;
for(i = 1;currNode && i<pos-1;i++) //注意这里是pos-1
currNode = currNode->next;
//将节点插入并对接前面的结点
if(currNode)
{
node->next = currNode->next;
currNode->next = node;
Linklist->length++;
}
}
单链表的删除
单链表删除数据元素
- 删除第 i 个节点及其数据元素
1.获取第 i 个节点,若该节点不是第一个节点,则获取第 i-1 个节点
2.将第 i-1 节点的后缀节点设为第 i 个节点的后缀节点
3.删除第 i 个节点,释放内存空间,记录并返回删除的数据元素的值