当前位置: 首页 > news >正文

C语言中单向链表:创建节点与插入新节点

一. 简介

单链表是一种常见且基础的数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。

本文简单学习一下C语言中如何实现单项链表。

二. C语言实现单向链表

单向链表:单向链表是一种线性数据结构,由一系列节点组成,每个节点包含两部分:

数据域:存储实际的数据。

指针域:存储指向下一个节点的地址。

单向链表关键点在于:每个节点只有一个指向下一个节点的指针,没有指向前一个节点的指针。

1. 定义链表节点,创建新节点

要实现单链表,首先要定义节点的结构,节点通常包含数据和指向下一个节点的指针。

#include <stdio.h>
#include <stdlib.h>//定义链表节点
typedef struct Node {int data;struct Node* next;
} Node;

创建新节点时,需要为其分配内存,并初始化数据和指针:

//创建链表新节点
Node* create_list(int data) {Node* head = (Node*)malloc(sizeof(Node));if(head == NULL) {printf("malloc error!\n");exit(1);}head->data = data;head->next = NULL;return head; 
}

2. 插入节点

插入节点的操作,可以在链表头部,或者指定位置,尾部进行插入。下面实现像链表头部,尾部插入节点。

(1) 向链表头插入新节点:

//向链表头部插入新节点
Node* insert_at_list_head(Node* head, int data) {Node* new_node = create_list(data);new_node->next = head;return new_node;
}

(2) 向链表尾部插入新节点:

//向链表尾部插入新节点
Node* insert_at_list_end(Node* head, int data) {Node* new_node = create_list(data);if (head == NULL) {return new_node;}//找到链表尾部Node* st_p = head;while(st_p->next != NULL) {st_p = st_p->next;}st_p->next = new_node;return head;
}

(2) 向链表的指定位置插入新节点:

//在链表的指定位置插入新节点
Node* insert_at_list_middle(Node* head, int data, int position) {int i = 0;Node* new_node = create_list(data);//如果插入的位置是头部if(position == 0) {return insert_at_list_head(head, data);}//遍历到指定位置的前一个节点Node* tmp_p = head;for(i=0; i < position-1 && tmp_p->next != NULL; i++) {tmp_p = tmp_p->next;}//如果插入位置超过链表长度,则不进行插入if(tmp_p->next == NULL) {free(new_node);return head;}//在指定位置插入新节点new_node->next = tmp_p->next;tmp_p->next = new_node;return head;
}


下一篇继续学习C语言中对于链表的操作。例如,在链表中查找某个节点,删除链表中某个节点,遍历链表,释放链表等等操作。


http://www.mrgr.cn/news/97330.html

相关文章:

  • btrfs , ext4 , jfs , xfs , zfs 对比 笔记250406
  • 基于BP神经网络的杂草智能识别系统(杂草识别、Python项目)
  • pulsar中的延迟队列使用详解
  • 消息队列基础概念及选型,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息
  • 整车CAN网络和CANoe
  • C# Winform 入门(12)之制作简单的倒计时
  • WEB安全--内网渗透--LMNTLM基础
  • 计算机系统--- BIOS(基本输入输出系统)
  • JCR一区文章,壮丽细尾鹩莺算法Superb Fairy-wren Optimization-附Matlab免费代码
  • iOS APP集成Python解释器
  • 设计模式简述(十三)适配器模式
  • 高频面试题(含笔试高频算法整理)基本总结回顾65
  • Spring 中的 @Autowired 和 @Resource
  • 美国mlb与韩国mlb的关系·棒球9号位
  • 计算机系统---UEFI(统一可扩展固件接口)
  • 开源软件与自由软件:一场理念与实践的交锋
  • Spring 中有哪些设计模式?
  • QT6(9)2.4:用 cmake 构建项目:整体介绍与 cmake 语法,cmake 不支持中文,依据QT帮助为 cmake文件添加模块,ui_dialog.h 头文件的位置有变化,更改与完善代码
  • C# Winform 入门(13)之通过WebServer查询天气预报
  • 定时器的实现方案:红黑树、最小堆与时间轮