5.单链表
单链表是一种链式的线性结构
链式结构中每个存储数据的结构称之为节点
单链表来说任何节点只能沿着一个方向访问到下一个节点
相邻的节点之间用指针连接(指针保存在节点结构中,指针指向下一个节点)
单链表最后一个节点的指针域必须指向NULL
可以使用头指针或者无效头结点代表一个单链表
其中头指针直接指向单链表中第一个节点,无效头结点的数据域不使用,指针域指向单链表第一个节点
我们可以使用头结点或者头指针代表整个链表
连式结构中节点个事可以根据需要随时调整,不会造成空间浪费
动态分配节点的内存能够根据需要分配合适大小的内存空间
#include <stdio.h>
#include <stdlib.h>
#include “linklist.h”
//创建一个空链表
linklist_t create_emptylist()
{
//创建头节点
linklist_t head = (linklist_t)malloc(sizeof(linklist));
if(head){
head->data = -1;//无效数据
head->next = NULL;//空链表
}
return head;
}
//销毁链表
void clear_list(linklist_t head)
{
linklist_t p = NULL,q = NULL;
q = head->next;
head->next = NULL;
while(q){
p = q;
q = q->next;
free(p);
}
p = NULL;
}
void destory_list(linklist_t *phead)
{
linklist_t head = *phead,p = NULL;
*phead = NULL;
while(head){
p = head;
head = head->next;
free(p);
}
p = NULL;
}
//按位置查找
linklist_t search_by_pos(linklist_t head,int pos)
{
int i = 1;
head = head->next;
while(head){
if(i==pos)
return head;
head = head->next;
i++;
}
return NULL;
}
//按位置删除
linklist_t delete_by_pos(linklist_t head,int pos)
{
linklist_t del = NULL,front = NULL;
del = search_by_pos(head,pos);
if(del){
//找到要删除的前一个节点
//第一个节点的前一个节点是头节点
if(pos==1)
front = head;
else
front = search_by_pos(head,pos-1);
//将前一介节点的指针域指向要删除节点的下一个节点
front->next = del->next;
free(del);
del = NULL;
}
return front;
}
//从指定位置之后插入,返回插入节点的地址
static linklist_t insert_by_pos(linklist_t p,T dt)
{
//1.构造新节点
linklist_t newnode = (linklist_t)malloc(sizeof(linklist));
if(newnode){
//2.将新节点的指针域指向下一个节点
newnode->next = p->next;
//3.将原位置的指针域指向新节点
p->next = newnode;
newnode->data = dt;
}
return newnode;
}
//从头部插入
linklist_t insert_from_head(linklist_t head,T dt)
{
return insert_by_pos(head,dt);
}
//从尾部插入
linklist_t insert_from_tail(linklist_t head,T dt)
{
linklist_t tail = head;
//找到最后一个节点
while(tail->next)
tail = tail->next;
return insert_by_pos(tail,dt);
}
void travel(linklist_t head)
{
//略过无效头节点
head = head->next;
while(head){
printf("%d ",head->data);
head = head->next;
}
printf("\n");
}
单链表(https://download.csdn.net/download/qq_41256954/11079082)