新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/11/15 16:14:14来源:尧图网络
数据结构笔记(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)按位修改
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉