链表详解(单链表、双向链表、链表逆序)

线性表

在计算机科学中,线性结构被称为线性表

线性表是在数据元素的非空集合中:
①存在唯一的一个首元素;
②存在唯一的一个尾元素;
③除首元素外每个元素有且只有一个直接前驱;
④除尾元素外每个元素有且只有一个直接后续;

按存储方式分为顺序存储与链式存储

线性表的基本操作有:
初始化、插入、删除、遍历(即访问每一个元素,如打印所有信息)、查找、排序

顺序存储结构

顺序存储结构:用一组地址连续的存储单元 依次存放线性表的所有数据元素

特点1:逻辑关系上相邻的两个元素在物理位置上也相邻,因此,可以直接存取表中任意一个元素

特点2(缺点):①存储空间闲置、存储容量难以扩充;②当进行插入和删除操作时,存在大量数据元素移动

链式存储结构

链式存储结构:①在链式存储结构中,数据元素的存储单元是不连续的。每个元素除自身信息外,还需要存储其后续元素的信息

②每个元素的存储映像称为结点,存放数据元素信息的域称为数据域,存放后续结点存储位置的域称为指针域,每个结点由数据域和指针域构成

③用指针相连的结点序列称为链表

单链表

单链表定义

链表,别名链式存储结构或单链表,用于存储逻辑关系为 “一对一” 的数据。链表中每个数据的存储都由以下两部分组成:
  1.数据元素本身,其所在的区域称为数据域。
  2.指向直接后继元素的指针,所在的区域称为指针域。
在这里插入图片描述
单链表存储结构中,有一首指针head指示链表中第一个结点的存储位置,同时,由于最后一个元素没有直接后续,所以单链表最后一个结点的指针域为空(NULL),而当head为NULL时,head所指向的单链表为空表,其表长length=0
单链空表逻辑状态图如下:
在这里插入图片描述
单链表一般逻辑状态图如下:
在这里插入图片描述

单链表基本操作(仅供参考)

单链表结构体定义

//单链表的结构定义 
typedef struct list
{
   
	int data;  //存放数据的地址 
	struct list *next;
}LIST_T;

单链表的初始化(创建头结点)

LIST_T*List_Init(int data)
{
   
	LIST_T * head;
	head = (LIST_T *)malloc(sizeof(LIST_T));
	head->data=data;
	head->next=NULL;
	return head;
}

单链表的插入

void List_Add(LIST_T  *head,int data)
{
   
	LIST_T  *pNode,*p1=head;
	pNode=(LIST_T  *)malloc(sizeof(LIST_T ));
	while(p1->next != NULL )
	{
     
		p1=p1->next;  //遍历链表,找到最末尾的节点
	}  
	p1->next=pNode;
	pNode->data=data;
	pNode->next=NULL;
}

单链表结点位置的删除

//删除单链表中第index位置上的结点 
int List_Del(LIST_T * head,int index)
{
   
    LIST_T * p1;
    LIST_T * p2;  //要删除结点的临时结点
    int nCount = 0;
    p1=head;
    while(p1->next != NULL)
    {
   
        if(nCount == index)
        {
   
            p2 = p1->next;
            p1->next = p1->next->next;
            free(p2);
        }
        p1=p1->next;
        nCount++;
    }
    return nCount;
}

单链表修改结点

// 修改单链表L的第index个位置上的结点 
void replace(LIST_T  *head, int index, int data)
{
   
    LIST_T * p1;
    int nCount = 0;
    p1=head;
    while(p1->next != NULL)
    {
   
        if(nCount == index)
        {
   
            p1->data = data;
            break;
        }
        p1=p1->next;
        nCount&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值