IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构——链表 -> 正文阅读

[数据结构与算法]数据结构——链表

数据结构——链表


对于c语言而言,链表中的元素在内存中不是连续存储的,队列在内存中是连续存储的。
链表中需要有一个头指针。头指针对与链表而言十分重要。可以通过头指针找到链表中的第一个节点。
每一个节点可以分为两个部分,一部分存放节点对应的指针,即指针域,另一部分存放数据,即数据域
每一个节点的指针域的指针数据指向下一个结点开始的地址。通过这种方式将链表的所有的节点连接起来。最后一个节点的指针域为空NULL。
在这里插入图片描述
链表不支持随机访问,链表在内存中并不是连续存在的,而是随机分布的,找到下一个节点的指针就必须找到上一个节点的指针,所以链表的使用必须先找到头指针。
栈和队列支持对元素进行随机访问。
链表可以实现更快的重新排列数据,但是牺牲了随机访问元素的功能。

创建链表

在这里插入图片描述

struct node
{
    unsigned char elem;
    struct node *next; 
};

链表的操作;

  1. 创建链表
//创建节点
       // 分配节点的内存空间(用到malloc函数)
       //填充数据域
       //填充指针域(暂时未链接,故为NULL)
struct node *head = NULL;

void creat_list(unsigned char elem);
{
   struct node *p =  (struct node *)malloc(sizeof(struct node));
   p->elem = elem;
   p->next = NULL;
}

尾插法建链表:

// 将节点链接
struct node *head = NULL;
struct node *tail = NULL;

void creat_list(unsigned char elem);
{
   struct node *p =  (struct node *)malloc(sizeof(struct node));
   p->elem = elem;
   p->next = NULL;
   
   if(head == NULL)
        head = p;
   else
        tail->next = p;
        
  tail = p;
}

在链表中增加一个节点:
考虑两个问题:①插入链表的位置;②插入链表的值。
在这里插入图片描述

在这里插入图片描述

void insert_node(int pos,unsigned char elem)
{
        struct node *pre;
        pre = head;
        int i = 0;
        struct node *p =  (struct node *)malloc(sizeof(struct node)); 
        
        if(pos == 0)//插入节点在链表头部;
        {
            p->elem = elem;
            p-。next = head;
            head = p;
        }
        else
        {
            while(i < pos - 1)//找前趋点
            {
                   pre = pre->next;
                   i++;
            }
        
             p->elem = elem;
             p->next = pre->next;
             pre->next = p;
             
             if(p->next == NULL)//在尾节点插入节点
                    tail = p;
        }
}

在链表中删除一个节点:

void  delete_node(int pos)
{
        struct node *pre;
        pre = head;
        int i;
        struct node *p;
        
        if(pos == 0)//删除的头节点
        {
                head = head-next;
                free(pre);
        }
        else
        {
                while(i < pos -1)
               {
                      pre = pre->next;
                      i++;
               }
        
                p = pre->next;
                p->next = p->next;
                if(p->next == NULL)//删除尾节点
                        tail = pre;
                free(p);
        }
}

遍历显示整个链表:

void print_linklist(void)
{
        struct node *p;
        
        for(p = head; p; p = p->next)
        printf("%c", p->elem);
        
        printf("/n");
}

查找链表中的节点:

int search(unsigned char elem)
{
        struct node *p;
        
        for(p = head; p ; p = p->next)
            if(p->elem == elem)
                return 1;
                
        return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:05:03  更:2021-08-06 10:05:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:40:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码