C语言数据结构学习:单链表

news/2024/11/1 3:06:49/

C语言数据结构学习

汇总入口:C语言数据结构学习:[汇总]

单链表

1. 基础了解

学习之前先了解线性表、顺序表和链表

线性表的两个特点:

  1. 有限的序列
  2. 序列中的每一个元素都有唯一的前驱和后继,除了开头和结尾两个节点

顺序表的特点:

  1. 分配一块连续的内存去存放这些数据,例如数组

链表:

  1. 内存是不连续的,元素会各自被分配一块内存,内存和内存之间用指针进行项链

2. 单链表

  1. 一个节点包括:data、next
    • next指向下一个节点的位置
  2. 一般包含 1个链表包含头结点 和 n个数据节点

3. 单链表操作:

  1. 增加

    1. 头插法:一个新的节点,next指向原先的链表头
    2. 尾插法:原先的链表尾指向,一个新的节点。
  2. 删除:

    只需要找到对应节点,将对应节点的前一个节点指向这个节点的**后继,**只操作一个指针

4. 代码示例

  1. 定义新的类型:Node,用于创建节点

    #include <stdio.h>
    #include <stdlib.h>/* 定义新的类型Node,用于创建节点 */
    typedef struct Node {int data;			//datastruct Node* next;	//存放下一个节点结构体的位置
    }Node;
    
  2. 初始化头节点函数

    /* 初始化头结点 */
    Node* initlist() {/* 开辟空间 */Node* list = (Node*)(malloc(sizeof(Node)));/* 初始化 */list->data = 0;list->next = NULL;return list;
    }
    
  3. 增加、删除函数

    /* 头插法 */
    void headInsert(Node* list, int data){Node* node = (Node*)(malloc(sizeof(Node)));node->data = data;node->next = list->next;		//指向头结点指向的节点list->next = node;				//头结点指向新的节点list->data++;					//当前链表中插入了一个元素
    }/* 尾插法 */
    void tailInsert(Node* list, int data) {Node* current = list;			//保存头结点的地址Node* node = (Node*)(malloc(sizeof(Node)));node->data = data;node->next = NULL;				//指向NULLwhile (current->next)			//如果current的后继不为NULL、则进入while{current = current->next;	//否则current会指向下一个节点}current->next = node;			//将current指向的最后一个节点 与新节点连接list->data++;					//当前链表中插入了一个元素
    }/* 删除 */
    void delete (Node* list, int data) {Node* current = list;			//保存头结点地址Node* previous = list;			//用于保存上一个结点地址current = current->next;		//使current指向第一个(数据)节点的位置while (current){				//如果current不为空指针则进入whileif (current->data == data){	//如果是我要删除的dataprevious->next = current->next;//把上一个节点的next链接到下一个节点free(current);			//释放当前节点list->data--;			//当前链表中删除了一个元素break;}previous = current;			//保存当前位置current = current->next;	//指向下一个节点}
    }
    
  4. 打印列表函数

    /* 打印链表 */
    void printList(Node* list){Node* current = list;			//保存头结点地址current = current->next;		//使current指向第一个(数据)节点的位置while (current) {				//如果current不为空指针则进入whileprintf("%d ", current->data);current = current->next;	//指向下一个节点}printf("\\n");
    }
    
  5. 测试

    /* 测试 */
    void main()
    {printf("Hello World!!\\n");/* 初始化链表 */Node* list = initlist();/* 头插法 */headInsert(list, 1);headInsert(list, 2);headInsert(list, 3);headInsert(list, 4);headInsert(list, 5);/* 尾插法 */tailInsert(list, 6);tailInsert(list, 7);tailInsert(list, 8);tailInsert(list, 9);tailInsert(list, 10);/* 删除 */delete(list, 1);delete(list, 6);/* 打印 */printList(list);return 0;
    }
    


http://www.ppmy.cn/news/1543469.html

相关文章

「Mac畅玩鸿蒙与硬件8」鸿蒙开发环境配置篇8 - 应用依赖与资源管理

本篇将介绍如何在 HarmonyOS 项目中高效管理资源文件和依赖&#xff0c;以确保代码结构清晰并提升应用性能。资源管理涉及图片、字符串、多语言文件等&#xff0c;通过优化文件加载和依赖管理&#xff0c;可以显著提升项目的加载速度和运行效率。 关键词 资源管理应用依赖优化…

【格言分享】程序员的经典名言解读

上一期文章我们分享了一些程序员的经典名言,每一句都蕴含着深刻的道理。 接下来就给大家一个一个分析一下 这些格言确实捕捉到了编程和软件开发的精髓,每一条都蕴含着丰富的经验和智慧。下面我将逐一解释这些格言,并分享一些我的看法。 C程序员永远不会灭亡。他们只是cast…

day03-LogStash

LogStash环境搭建 1.下载Logstash [10:17:18 rootelk2:/usr/local]#wget http://192.168.13.253/Resources/ElasticStack/softwares/logstash-7.17.23-amd64.deb2.安装Logstash [10:17:35 rootelk2:/usr/local]#dpkg -i logstash-7.17.23-amd64.deb 3.创建软连接&#xff0…

python psutil 模块概述

文章目录 psutil 模块概述支持的系统安装 psutil 使用示例CPU 信息获取内存信息获取磁盘信息获取网络信息获取 进程管理功能查看系统进程获取进程详情示例脚本&#xff1a;监控系统资源 总结核心功能使用场景主要优点 psutil 模块概述 psutil 是一个强大的跨平台 Python 库&am…

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略&#xff0c;以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法&#xff1a; 一、编队控制方法 领航-跟随法&#xff08;Leader-Follower&#xff09; 通过设定一架无人机作为领航者&#xff08;长机&am…

java.sql.SQLException: ORA-00971: 缺失 SET 关键字

目录 背景&#xff1a; 过程&#xff1a; 错误原因: 解决办法&#xff1a; 总结: 背景&#xff1a; 正在运行某个项目程序&#xff0c;提交信息之后发现库中并没有刚刚的相关数据&#xff0c;后来查看后台信息&#xff0c;发现提示错误&#xff0c;java.sql.SQLException…

ReactNative 启动应用(2)

ReactNative 启动应用 简述 本节我们来看一下ReactNative在Android上启动Activity的流程&#xff0c;ReactNative在Android上也是一个Apk&#xff0c;它的实现全部都在应用层&#xff0c;所以它肯定也是符合我们Android应用的启动流程的&#xff0c;UI页面的载体也是一个Acti…

appium文本输入的多种形式

目录 一、send_keys方法 二、press_keycode方法 三、subprocess方法直接通过adb命令输入 一、send_keys方法 这个是最常用的方法&#xff0c;不过通常使用时要使用聚焦&#xff0c;也就是先点击后等待&#xff1a; element wait.until(EC.presence_of_element_located((By…