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

数据结构之链表

C++中常见的数据结构-CSDN博客

目录

一、链表的定义

二、链表的创建

三、链表的遍历

四、链表的插入

五、链表的删除

六、总结

 

链表是计算机科学中常见的一种数据结构,c/c++语言中也有着丰富的链表操作函数库。本文将从链表的定义、创建、遍历、插入、删除等多个方面进行详细讲解,带你从入门到精通。

一、链表的定义

链表是一种动态数据结构,由节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表分为单向链表、双向链表和循环链表等多种类型。使用链表可以灵活地插入、删除元素,不需要预先分配固定大小的内存空间。

二、链表的创建

在c/c++中,可以使用结构体来定义一个节点,并用指针来表示节点之间的关系,从而实现链表。下面是一个单向链表的创建示例代码:

#include <stdio.h>
#include <stdlib.h>
struct node{int data;           //数据域struct node *next;//指针域
};
int main()
{struct node *head,*p,*q;int n,i;printf("请输入节点个数n:");scanf("%d",&n);head = NULL;for (i=1; i <=n;i++){p =(struct node *)malloc(sizeof(struct node));if (p== NULL){printf("内存分配失败!");exit(1);}printf("请输入第%d个节点的值:",i);scanf("%d",&p->data);p->next = NULL;if (head == NULL){head =p;}else {q->next =p;}q =p;}printf("链表各节点的值为:");p = head;while (p!= NULL){printf("%d",p->data);p =p->next;}return 0;
}
三、链表的遍历

链表遍历是指按照一定的顺序依次访问链表中的每一个节点。下面是一个单向链表的遍历示例代码:

cstruct node *p;
p = head;
while (p!= NULL)
{//访问节点pp =p->next;
}
四、链表的插入

链表插入是指在链表中任意位置插入一个新节点。下面是一个单向链表的插入示例代码:

void insert(struct node *head, int i, int x)
{struct node *p,*q,*new_node;new_node =(struct node *)malloc(sizeof(struct node));if (new_node == NULL){printf("内存分配失败!");exit(1);}new_node->data =x;p = head;for (int j =1; j <=i;j++){q =p;p =p->next;}new_node->next =p;q->next = new_node;
}
五、链表的删除

链表删除是指在链表中删除一个节点。下面是一个单向链表的删除示例代码:

void delete(struct node *head, int i)
{struct node *p,*q;p = head;for (int j =1; j <=i;j++){q =p;p =p->next;}q->next =p->next;free(p);
}
六、总结

本文从链表的定义、创建、遍历、插入、删除等多个方面进行了详细讲解,希望能够帮助大家更好地理解和掌握c/c++语言中的链表操作。在实际应用中,需要根据具体情况选择合适的链表类型和操作方式,才能发挥链表的优势。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI辅助编码在主流IDE中的智能代码补全说明
  • 一 初识爬虫
  • 分享7款宝藏APP,用途多样,值得一试
  • centos7.9系统安装cloudpods并使用ceph存储(二)
  • kubernetes培训
  • Qt之QSS的介绍以及加载QSS
  • 阿里云私有镜像仓库配置及使用
  • 双重映射+逆向并查集+恢复
  • Spring Cloud Eureka与Kubernetes的集成:服务发现的混合方案
  • 开放式耳机哪个品牌实用?南卡、漫步者、小米 三款爆火单品横评
  • 自动化运维:Ansible、Puppet、Chef工具对比与实战
  • 正确申报化妆品数量技巧 | 国际物流服务贸易 | 箱讯科技
  • 电路笔记(PCB): KICAD 导入 JLC嘉立创项目
  • 【js】箭头函数和普通函数在this指向的区别
  • Docker快速上手
  • [译]Python中的类属性与实例属性的区别
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • avalon2.2的VM生成过程
  • iOS 系统授权开发
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java正则表式的使用
  • js中forEach回调同异步问题
  • mysql外键的使用
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SwizzleMethod 黑魔法
  • Unix命令
  • 分布式任务队列Celery
  • 后端_MYSQL
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端工程化(Gulp、Webpack)-webpack
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微服务入门【系列视频课程】
  • 携程小程序初体验
  • 一、python与pycharm的安装
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 优化 Vue 项目编译文件大小
  • 怎么把视频里的音乐提取出来
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $jQuery 重写Alert样式方法
  • (02)vite环境变量配置
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释