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

数据结构--单链表操作

1.单链表的创建(带头结点)

#include<stdlib.h>
#define ElemType  int
typedef struct {//定义一个结点ElemType data;struct STU* next;
}STU,*LinkList;
bool InitList(LinkList& L) {L = (STU*)malloc(sizeof(STU));//创建头结点if (L == NULL) {//以防内存不足创建失败return false;}L->next = NULL;return true;
}
int main() {LinkList L;InitList(L);
}

2.单链表的创建(不带头结点)

#include <cstddef>//使用NULL需要的头文件
#define ElemType int
typedef struct {ElemType data;struct STU* next;
}STU,*LinkList;
bool InitList(LinkList& L) {L = NULL;//空表,没有结点return true;}
int main() {LinkList L;//声明一个指向单链表的指针InitList(L);//初始化一个空的单链表
}

3.单链表(带头结点)--按位序插入

#include<stdlib.h>
#define ElemType  int
#include <cstddef>
typedef struct {//定义一个结点ElemType data;struct STU *next;
}STU, *LinkList;
bool InitList(LinkList& L) {L = (STU*)malloc(sizeof(STU));//创建头结点if (L == NULL) {//以防内存不足创建失败return false;}L->next = NULL;return true;
}
bool ListInsert(LinkList& L, int i, ElemType e) {if (i < 1) {return false;}STU *p;//定义一个指针让其指向当前扫描到的结点int j = 0;//表示p当前指向第几个结点p = L;//L指向头结点,头结点是第零个结点,不存数据while (p != NULL && j < i - 1) {//找到第i-1个结点p = p -> next;j++;}if (p == NULL) {return false;}STU* s = (STU*)malloc(sizeof(STU));//定义一个新结点放插入的元素s->data = e;s->next = p->next;//不要搞反这两行的顺序p->next = s;return true;
}
int main() {LinkList L;InitList(L);ListInsert(L, 2, 3);//在第二个位置插入数据3
}

 4.单链表(不带头结点)--按位序插入

#include <cstddef>//使用NULL需要的头文件
#include "ConsoleApplication1.h"
#include <corecrt_malloc.h>
#define ElemType int
typedef struct {ElemType data;struct STU* next;
}STU,*LinkList;
bool InitList(LinkList& L) {L = NULL;//空表,没有结点return true;}
bool ListInsert(LinkList &L, int i, ElemType e) {if (i < 1) {return false;}if (i == 1) {//特殊情况STU* s = (STU*)malloc(sizeof(STU));s->data = e;s->next = L;L = s;return true;}STU* p;//定义一个指针让其指向当前扫描到的结点int j = 1;//表示p当前指向第几个结点p = L;//L指向头结点,头结点是第零个结点,不存数据while (p != NULL && j < i - 1) {//找到第i-1个结点p = p -> next;j++;}if (p == NULL) {return false;}STU* s = (STU*)malloc(sizeof(STU));//定义一个新结点放插入的元素s->data = e;s->next = p->next;//不要搞反这两行的顺序p->next = s;return true;}
int main() {LinkList L;//声明一个指向单链表的指针InitList(L);//初始化一个空的单链表ListInsert(L, 2, 3);
}

5.单链表--指定结点的后插操作(带头结点)

#include<stdlib.h>
#define ElemType  int
typedef struct {//定义一个结点ElemType data;struct STU* next;
}STU,*LinkList;
bool InitList(LinkList& L) {L = (STU*)malloc(sizeof(STU));//创建头结点if (L == NULL) {//以防内存不足创建失败return false;}L->next = NULL;return true;
}
bool InsertNextNode(STU* p, ElemType e) {if (p == NULL) {return false;}STU* s = (STU*)malloc(sizeof(STU));s->data = e;s->next = p->next;p->next = s;return true;
}
int main() {LinkList L;InitList(L);STU *p;InsertNextNode(p, 3);
}

6.单链表--指定结点的前插操作(带头结点)

#include<stdlib.h>
#define ElemType  int
typedef struct {//定义一个结点ElemType data;struct STU* next;
}STU,*LinkList;
bool InitList(LinkList& L) {L = (STU*)malloc(sizeof(STU));//创建头结点if (L == NULL) {//以防内存不足创建失败return false;}L->next = NULL;return true;
}
bool InsertPriorNode(STU* p, ElemType e) {//前插操作就是先后插,再调转两个数据的位置if (p == NULL) {return false;}STU* s = (STU*)malloc(sizeof(STU));s->next = p->next;p->next = s;s->data = p -> data;p->data = e;return true;
}
int main() {LinkList L;InitList(L);STU* p;InsertPriorNode(p, 3);
}

 

 7.单链表--按位序删除(带头结点)

#include<stdlib.h>
#define ElemType  int
typedef struct {//定义一个结点ElemType data;struct STU* next;
}STU,*LinkList;
bool InitList(LinkList& L) {L = (STU*)malloc(sizeof(STU));//创建头结点if (L == NULL) {//以防内存不足创建失败return false;}L->next = NULL;return true;
}
bool ListDelete(LinkList& L, int i, ElemType e) {if (i < 1) {return false;}STU* p;int j = 0;p = L;while (p != NULL && j < i - 1) {p = p->next;j++;}if (p == NULL||p->next==NULL) {return false;}STU* q = p->next;e = q->data;p->next = q->next;free(q);return true;
}
int main() {LinkList L;InitList(L);ElemType e;ListDelete(L, 2, e);
}

相关文章:

数据结构--单链表操作

1.单链表的创建&#xff08;带头结点&#xff09; #include<stdlib.h> #define ElemType int typedef struct {//定义一个结点ElemType data;struct STU* next; }STU,*LinkList; bool InitList(LinkList& L) {L (STU*)malloc(sizeof(STU));//创建头结点if (L NUL…...

AlmaLinux (兼容centos)安装Geant4与ROOT

AlmaLinux 介绍 AlmaLinux OS 是一个开源、社区驱动的 Linux 操作系统&#xff0c;它填补了因 CentOS 稳定版本停止维护而留下的空白&#xff0c;同时更加强大。 安装 AlmaLinux 这个我用的是 windows 子系统进行安装 首先打开微软商店&#xff0c;然后搜索AlmaLinux&#…...

FPGA面试题(2)

一.同步复位和异步复位 同步复位&#xff1a;当clk有效时&#xff0c;复位才有效。优点&#xff1a;有利于时序分析&#xff0c;防止毛刺现象出现。缺点&#xff1a;复位信号必须大于时钟周期&#xff0c;大部分逻辑器件中D触发器都只有异步复位端口&#xff0c;需要在寄存器数…...

【C++ Primer Plus学习记录】指针——使用new来创建动态数组

目录 1.使用new创建动态数组 2.使用动态数组&#xff08;如何使用指针访问数组元素&#xff09; 如果程序只需要一个值&#xff0c;则可能会声明一个简单变量&#xff0c;因为对于管理一个小型数据对象来说&#xff0c;这样做比使用new和指针更简单。通常&#xff0c;对于大型…...

移动app广告变现,对接广告联盟还是选择第三方聚合广告平台?

作为互联网广告的载体&#xff0c;APP天生就比线下传统广告位更具优势&#xff0c;不受地域限制可以辐射到地球上的每一个角落&#xff0c;可以让广告获得更广的覆盖面。通过丰富的广告形式&#xff0c;精准的目标用户画像&#xff0c;也可以更好地实现品牌广告或效果广告的投放…...

ARM 按键控制 LED灯,蜂鸣器,风扇

main.c: #include "uart.h" #include "key_it.h" int main() {all_led_init();uart4_init();//串口初始化//中断初始化key_it_config();key3_it_config();buzzer_init();fan_init();while(1){//保证主程序不结束}return 0; }src/key_it.c: #include"…...

VirtualBox Ubuntu扩展虚拟机磁盘空间

关于Orical VM VirtualBox虚拟机安装了ubuntu linux系统&#xff0c;由于需要&#xff0c;磁盘空间不足&#xff0c;需要扩展磁盘空间&#xff0c;最终找到了一个非常简单的方法&#xff0c;上干货。 1、关闭虚拟机 2、运用VBoxManage命令扩展vdi文件的空间 打开windows的命…...

C#开发的OpenRA游戏之电力系统之二

C#开发的OpenRA游戏之电力系统之二 继续前面的电力系统分析,在OpenRA游戏里,每一个建筑物都会有一个电力描述字段,说明这个建筑物是消耗电力,还是产生电力的。如果这个建筑物是产生电力的,那么这个字段就会是正值,如果这个建筑物是消耗电力的,就会是负值。因此所有电厂…...

Java架构师基础框架设计

目录 1 导学2 理解软件框架3 框架设计里面的框架和设计模式的关系4 基础框架中常见的基本功能4.1 事务处理4.2 微服务网络调用4.3 缓存实现4.4 分布式id4.5 任务调度4.6 工作流5 基础框架的几种基本的使用方式5.1 继承方式5.2 注解或注解加AOP的方式5.3 将基础框架的功能直接当…...

tortoise创建本地仓库

1.安装git和tortoise 推荐 TortoiseGit的安装与配置方法 以及 Git TortoiseGit 配置步骤以及本地版本管理 这里记录一下我遇到的问题 1.右键没有创建本地版本库 2 .创建了但是克隆不了 后续专有 一般选专有网络 注意自行谨慎选择 自行负责...

【FreeRTOS】【STM32】03 FreeRTOSConfig.h头文件简介与修改

基于[野火]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf FreeRTOSConfig.h头文件是FreeRTOS各项功能的打开与关闭 FreeRTOSConfig.h头文件简介 之前也说过了&#xff0c;FreeRTOSConfig.h文件可以添加在工程中任意文件夹&#xff0c;只需要在路径中添加好了就行。…...

VScode商店无法访问

下面的方法也许对你没用&#xff0c;也许也有用&#xff0c;但是尝试一下不会有任何副作用。 步骤一&#xff1a; 步骤二&#xff1a;在Proxy代理设置中复制输入 http://127.0.0.1:8080 步骤三&#xff1a;关闭软件&#xff0c;再打开VScode&#xff0c;把http://127.0.0.1:8…...

【UnityUGUI】复合控件详解,你还记得多少

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…...

ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“

现象&#xff1a; ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“ 尝试查找原因&#xff1a;打开从windos直接粘贴c程序到ubuntu的c代码&#xff0c;发现多了 <200b>&#xff1a; 方案&#xff1a;尝试在vim编辑器删除&#xff0c;多出来的字符后编译…...

LeetCode 143.重排链表

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 分析题目后我们可以直接进行模拟实现。 具体用到的就是我们之前的知识的结合&#xff0c;首先使用快慢指针找到链表的中间结点。然后将后半段链表给翻转一下&#xff0c;然后再让这…...

不做决策的“RPA机器人”,不是合格的“数字化劳动力”

01 RPA机器人向“数字劳动力”的转变 随着 RPA 技术被广泛应用各行业的不同场景中&#xff0c;再结合以深度学习为代表的 AI 人工智能技术的新一轮发展&#xff0c;RPA 机器人目前已经从仅能处理“单一、重复和标准化的流程”向智能流程自动化的方向发展&#xff0c;从而具备处…...

网页开发中使用highlight.js实现代码高亮 + 行号

一、背景# 笔者在开发这套博客系统时使用 Editormd 作为 Markdown 编辑器&#xff0c;由于不满足其代码高亮的样式&#xff0c;因此选用 highlight.js 插件来实现代码高亮功能。但是&#xff0c;highlight.js 插件不提供行号的设置功能&#xff0c;于是有了该文章。 二、实现…...

访问Apache Tomcat的manager页面

配置访问Tomcat manager页面的用户名、密码、角色 Tomcat安装完成后&#xff0c;包含了一个管理应用&#xff0c;默认安装在 <Tomcat安装目录>/webapps/manager 例如&#xff1a; 要使用管理页面的功能&#xff0c;需要在conf/tomcat-users.xml文件中配置用户、密码及…...

Ubuntu 20.04.6 LTS repo int 提示/usr/bin/env: “python“: 权限不够

这是由于ubuntu20.04默认安装的python3&#xff0c;将python命令配置i为了python3为软连接&#xff0c;此时只需要通过命令添加配置为python软连接即可 sudo ln -s /usr/bin/python3.8 /usr/bin/python 其中/usr/bin/python3.8这个需要看ubuntu下具体的文件&#xff0c;/usr/…...

python随手小练5

1、求1-100的累加和&#xff08;终止条件 1-100&#xff09;&#xff08;while和for两种&#xff09; #while循环 count 0 index 0 while index < 100:count indexindex 1 print(count)#for循环 sum 0 for i in range(0,101):sum i print(sum)结果&#xff1a; 5050 2…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...