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

【数据结构/C++】线性表_单链表的基本操作

image.png

image.png

image.png

#include <iostream>
using namespace std;
// 2. 单链表
// ElemType 的定义
typedef int ElemType;
typedef struct LNode
{ElemType data;struct LNode *next;
} LNode, *LinkList;
// 初始化单链表
bool InitList(LinkList &L)
{L = (LNode *)malloc(sizeof(LNode));// 内存不足,分配失败if (L == NULL){return false;}L->next = NULL;return true;
}
// 在第 i 个位置插入元素
bool ListInsert(LinkList &L, int i, ElemType e)
{if (i < 1){return false;}// 指针 p 指向当前扫描到的结点LNode *p = L;// 当前p指向第几个结点int j = 0;// L 指向头结点,头结点是第 0 个结点p = L;while (p != NULL && j < i - 1){p = p->next;j++;}// i 不合法if (p == NULL){return false;}LNode *s = (LNode *)malloc(sizeof(LNode));s->data = e;s->next = p->next;p->next = s;return true;
}
// 删除第 i 个元素
bool ListDelete(LinkList &L, int i, ElemType &e)
{if (i < 1){return false;}LNode *p = L;int j = 0;p = L;while (p != NULL && j < i - 1){p = p->next;j++;}if (p == NULL){return false;}if (p->next == NULL){return false;}// q 指向被删除的结点LNode *q = p->next;// e 来接收返回的删除值e = q->data;p->next = q->next;free(q);return true;
}
// 遍历单链表
void ListTraverse(LinkList L)
{LNode *p = L->next;while (p != NULL){cout << p->data << " ";p = p->next;}cout << endl;
}
// 将单链表逆置
void ReverseList(LinkList &L)
{// LNode *p = L->next;LNode *q = NULL;LNode *r = NULL;L->next = NULL;while (p != NULL){// 头插法(相当于原单链表这个队列不断取出每一个元素向新的链表头插入)// q 指向新链表的头// p 指向正在操作的某个结点// r 暂存下一个将要操作的结点q = L->next;L->next = p;r = p->next;p->next = q;p = r;}
}int main()
{LinkList L;InitList(L);for (int i = 1; i <= 10; i++){ListInsert(L, i, i);}ListTraverse(L);ReverseList(L);ListTraverse(L);ReverseList(L);ElemType e;ListDelete(L, 3, e);ListTraverse(L);ListDelete(L, 1, e);ListTraverse(L);return 0;
}
http://www.lryc.cn/news/240900.html

相关文章:

  • flink1.13.6版本的应用程序(maven版)
  • 深度学习之四(循环神经网络Recurrent Neural Networks,RNNs)
  • 【论文精读】HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face
  • 安装gitlab
  • Nginx模块开发之http handler实现流量统计(1)
  • JSP编写自己的第一个WebServlet实现客户端与服务端交互
  • 三、Keil安装芯片包、下载固件库、建立STM32工程模板
  • 微信相框M1-03花屏抢救照片数据
  • 小程序可拖拽按钮
  • ARM裸机-19(NandFlash和iNand)
  • 机器学习/sklearn笔记:MeanShift
  • opencv-简单图像处理
  • Linux(Kali\Ubuntu\CentOS\arm-Linux)安装Powershell
  • ubuntu20.04安装多版本cuda,切换版本
  • 网络渗透测试(wireshark 抓取QQ图片)
  • gRPC之gRPC负载均衡(客户端负载均衡)(etcd)
  • 语音识别技术paddlespeech的安装和使用
  • 【机器学习】034_多层感知机Part.2_从零实现多层感知机
  • 2023年中职“网络安全“—Web 渗透测试①
  • Android——资源IDnonFinalResIds和“Attribute value must be constant”错误
  • 批量创建表空间数据文件(DM8:达梦数据库)
  • 简单聊聊加密和加签的关系与区别
  • 视频转码方法:多种格式视频批量转FLV视频的技巧
  • 【Java 进阶篇】Redis 数据结构:轻松驾驭多样性
  • 东用科技智能公交识别系统无线传输方案
  • Django批量插入数据及分页器
  • PHP 语法||PHP 变量
  • 【python基础(四)】if语句详解
  • Spring Boot中常用的参数传递注解
  • Quartz .Net 的简单使用