首页/新闻资讯/正文详情

数据结构笔记(c++,顺序表和链表的基本操作代码)

发布时间:2026/9/25 16:30:30 来源:云帆数科 栏目:资讯中心
数据结构笔记(c++,顺序表和链表的基本操作代码)
大二上学数据结构方法20min理解概念30min写代码考伪代码手写不能用vector库20min刷课后题考试考选择题应用题代码题。学完能应付考试写代码知道用什么容器知道程序为什么慢会手写底层代码懂内部原理干活用库考试造库。知识点看书做笔记思维导图上网搜错题及时回顾下面是作业代码。c版,除了能运行的代码外其余为c,c混用的伪代码一、线性表1、顺序表随机存取结构占用连续存储空间静态分配1顺序表定义//简洁定义 int A[maxSize];//顺序表为整形 int n;//长度为n //结构体定义 typedef struct{ int data[maxSize]; int length; }SqList;2)初始化void InitList(SqList L){ L.length0; }3顺序表查找返回下标int LocatedElem(SqList L,int e){ int i; for(i1;iL.length;i){ if(eL.data[i])return i; } return 0; }返回元素int GetElem(SqList L,int p,int e){ if(p1||pL.length)return 0; eL.data[p]; return 1; }4)顺序表插入int ListInsert(SqList L,int p,int e){ int i; if(p1||pL.length1||L.lengthmaxSize)return 0; for(iL.length;ip;i--){ L.data[i1]L.data[i]; } L.data[p]e; L.length; return 1; }5)顺序表删除int ListDelete(SqList L,int p,int e){ int i; if(p1||pL.length)return 0; eL.data[p]; for(ip;iL.length;i){ L.data[i]L.data[i1]; } L.length--; return 1; }6)顺序表修改int ListModify(SqList L,int p,int x){ if(p1||pL.length)return 0; L.data[p]x; return 1; }能运行的代码#include bits/stdc.h #includewindows.h using namespace std; #define maxSize 100 typedef int ElemType; //顺序表定义 typedef struct{ int data[maxSize]; int length; }SqList; //顺序表初始化 void InitList(SqList L){ L.length0; } //顺序表插入 int ListInsert(SqList L,int p,int e){ int i; if(p1||pL.length1||L.lengthmaxSize-1)return 0; for(iL.length;ip;i--){ L.data[i1]L.data[i]; } L.data[p]e; L.length; return 1; } //顺序表删除 int ListDelete(SqList L,int p,int e){ int i; if(p1||pL.length)return 0; eL.data[p]; for(ip;iL.length;i){ L.data[i]L.data[i1]; } L.length--; return 1; } //顺序表修改 int ListModify(SqList L,int p,int x){ if(p1||pL.length)return 0; L.data[p]x; return 1; } //打印顺序表 void PrintList(SqList L){ for(int i1;iL.length;i){ coutL.data[i] ; } coutendl; } int main(){ SetConsoleOutputCP(65001); SqList L; InitList(L); int op; int pos,val,e; while(true){ cout\n菜单endl; cout1 插入\n2 删除\n3 修改\n4 打印\n0 退出endl; cout请输入操作号; cinop; if(op0){ cout程序结束endl; break; } else if(op1){ cout输入插入位置(从1开始)和数值:endl; cinposval; if(ListInsert(L,pos,val)){ cout插入成功\n; }else{ cout插入失效位置非法\n; } } else if(op2){ cout输入要删除的位置; cinpos; if(ListDelete(L,pos,e)){ cout删除成功\n; }else{ cout删除失败位置非法\n; } } else if(op3){ cout输入修改的位置和新数值; cinposval; if(ListModify(L,pos,val)){ cout修改成功; }else{ cout修改失败位置非法\n; } } else if(op4){ cout当前顺序表; PrintList(L); } else{ cout输入错误重新选:); } } return 0; }2、单链表顺序存储结构不支持随机访问动态分配1单链表结点定义typedef struct LNode{ int data;//数据域 struct LNode *next;//指针域 }LNode;2单链表初始化(408要用malloc就不用new了)int InitList(LNode *L){ L(LNode *)malloc(sizeof(LNode)); if(LNULL)return 0; L-nextNULL; return 1; }3)单链表查找按位查找int GetElem(LNode *L,int i,int e){ if(i1)return 0; LNode *pL-next; int j1; while(p!NULLji){ pp-next; jj1; } if(pNULL)return 0; ep-data; return 1; }按值查找int LocatedElem(LNode *L,int x){ LNode *pL-next; int j1; while(p!NULLp-data!x){ pp-next; j; } if(pNULL)return 0; return j; }4)单链表插入按位插入int ListInsert(LNode *L,int i,int e){ LNode *pL: int j0; while(p!nullptrji-1){ pp-next; j; } if(pnullptr)return 0; LNode *s (LNode *)malloc(sizeof(LNode()); s-datae; s-nextp-next; p-nexts; return 1; }头front插法链表都有头结点void CreatListF(LNode *C,int a[],int n){ LNode *s; int i; C(LNode *)malloc(sizeof(LNode)); C-nextNULL; for(i1;in;i){ s(LNode *)malloc(sizeof(LNode)); s-dataa[i]; //关键步骤 s-nextC-next; C-nexts; } }尾rear插法void CreatListR(LNode *C,int a[],int n){ LNode *s,*r; int i; C(LNode *)malloc(sizeof(LNode()); C-nextNULL; rC; for(i1;in;i){ s(LNode *)malloc(sizeof(LNode)); s-dataa[i]; r-nexts; rr-next; } r-nextNULL; }5)单链表删除按位删除int ListDelete(LNode *L,int i,int e){ if(LNULL)return 0; if(i1)return 0; LNode *pL: int j0; while(p!NULLji-1){ PP-next; j; } if(pNULL||p-nextNULL)return 0; LNode *qp-next; eq-data; p-nextq-next; free(q); return 1; }按值删除int ListDeleteByVal(LNode *L,int x,int e){ LNode *pL: while(p-next!NULLp-next-data!x){ pp-next; } if(p-nextNULL)return 0; LNode *qp-next; eq-data; p-nextq-next; free(q); return 1; }6)单链表修改int ListModify(LNode L,int x){ LNode *p; pL-next; j1; while(p!NULLji){ pp-next; jj1; } if(pNULL)return 0; p-datax; return 1; }能运行的代码#includebits/stdc.h using namespace std; typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; int InitList(LinkList L){ //L(LNode *)malloc(sizeof(LNode)); Lnew LNode; if(LNULL)return 0; L-nextNULL; return 1; } int ListInsert(LinkList L,int i,int e){ LNode *pL; int j0; while(p!NULL ji-1){ pp-next; j; } if(pNULL)return 0; LNode *snew LNode; s-datae; s-nextp-next; p-nexts; return 1; } int ListDelete(LinkList L,int i,int e){ if(LNULL)return 0; if(i1)return 0; LNode *pL; int j0; while(p!NULLji-1){ pp-next; j; } if(pNULL||p-nextNULL)return 0; LNode *qp-next; eq-data; p-nextq-next; delete q; return 1; } int ListModify(LinkList L,int i,int x){ LNode *p; pL-next; int j1; while(p!NULLji){ pp-next; j; } if(pNULL)return 0; p-datax; return 1; } //遍历打印 void ListTraverse(LinkList L){ LNode *pL-next; while(p!NULL){ coutp-data ; pp-next; } coutendl; } //销毁链表释放全部内存 void DestroyList(LinkList L){ LNode *p; while(L!NULL){ pL; LL-next; delete p; } } int main(){ LinkList L; InitList(L); ListInsert(L,1,1); ListInsert(L,2,2); ListInsert(L,3,3); cout插入之后; ListTraverse(L); ListModify(L,2,99); cout修改第二位为99:; ListTraverse(L); int del_e; ListDelete(L,1,del_e); cout删除第一位删除值del_e:; ListTraverse(L); DestroyList(L); return 0; }ADT基本操作操作结果InitList(L)构造一个空的线性表 LGetElem(L,i,e)按值查找用 e 返回L 中第i 个数据元素的值LocateElem(L,e)按位查找返回L 中第 1 个值与e 相同的元素在 L 中的位置。若这样的数据元素不存在则返回值为0ListInsert(L,i,e)在 L 中第i 个位置之前插入新的数据元素eL 的长度加1ListDelete(L,i)按位删除 L 的第i 个数据元素L的长度减 1ListModify(L,p,x)按位修改

相关推荐

高并发采集如何不踩坑?LokiProxy的实践价值
高并发采集如何不踩坑?LokiProxy的实践价值

当请求量从每秒几十攀升到上千,工程团队面对的早已不是“能不能采到数据”的问题,而是“如何在稳定、可控、合规的前提下持续采集”。本文从高并发采集的实际工程痛点出发,聊聊基础设施选型与架构实践中真正值得关注的细节。一、高并发采集的… · 2026/9/25 16:30:30

ctfshwo pwn入门栈收尾
ctfshwo pwn入门栈收尾

接续暑假的屎山,原先那篇字数太多,输入很卡,新开一篇 pwn86 这里看到只开启了nx 打开后只发现一个主函数。左侧的函数列表没有其他的函数 首先调用write输出文本,应该是logo,接着调用read 这里发现存在一个调用read的… · 2026/9/25 16:30:24

自研从站设备调试过程
自研从站设备调试过程

TwinCAT 项目设置 — MCUXpresso SDK 文档 TWINCAT-沈蓝色(R-RT-T)-EBUS连接第一版base,扫描端口有如下问题, TWINCAT-沈蓝色(R-RT-T)-EBUS连接DA的端口1,扫描端口有如下问题, 默… · 2026/9/25 16:30:24

Python入门:安装到循环全攻略
Python入门:安装到循环全攻略

摘要:本篇笔记记录Python环境安装、常用基础数据类型、运算符与表达式、分支if语句、while循环基础语法,附带示例代码与易错点总结。一、Python的安装访问Python官网下载对应操作系统的安装包。Windows安装时务必勾选 Add Python to PATH,自动… · 2026/9/25 17:01:10

Atlas 300V实战:从YOLO模型转换到推理部署的完整指南
Atlas 300V实战:从YOLO模型转换到推理部署的完整指南

我第一次拿到Atlas 300V 24G的时候,第一反应是“这不就是张显卡嘛”。直到把卡插上服务器、照着显卡的思路折腾了一周、被各种报错反复摩擦之后,我才真正摸清这块卡的脾气。这篇文章不打算写成官方文档的复读机,而是把我实际部署YOLO模型到At… · 2026/9/25 17:01:10

红外目标检测数据集实战指南:加载、预处理与模型适配
红外目标检测数据集实战指南:加载、预处理与模型适配

1. 这20个红外目标检测数据集不是“拿来即用”的资源包,而是需要你亲手拆解的工程化拼图我第一次在实验室接到红外目标检测任务时,导师甩过来一个压缩包,说:“里面是公开数据集,你先跑通baseline。”——结果三天后我盯… · 2026/9/25 17:01:04

蓝牙学习之Linux命令
蓝牙学习之Linux命令

bluetoothctl 主要功能:扫描、配对、连接、信任、查看设备信息等。 扫描 ethanG5000:~$ bluetoothctl scan on SetDiscoveryFilter success Discovery started ethanG5000:~$ bluetoothctl devices Device B0:82:E2:67:46:DB XXXXXX配对 ethanG5000:~$ bluetoothct… · 2026/9/25 17:01:04

AI日报类项目设计与落地要点解析
AI日报类项目设计与落地要点解析

我无法基于“AI 日报(2026年9月18日)”这一标题生成符合要求的高质量博文。原因如下:该标题本身不具备可拆解的具体项目属性:它是一个时间标记泛称组合(“AI 日报”),既非技术方案、工具实现、硬… · 2026/9/25 17:00:39

LLM Wiki 亮点深挖:知识图谱、MCP、深度研究、两步摄入是怎么实现的(TaoToken 配置骨架)
LLM Wiki 亮点深挖:知识图谱、MCP、深度研究、两步摄入是怎么实现的(TaoToken 配置骨架)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 17:00:02

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码