数据结构总复习

文章目录

  • 线性表
    • 动态分配的顺序存储结构
    • 链式存储

线性表

动态分配的顺序存储结构

通过分析代码,我们发现,要注意什么:

  • 要分清你的下标
  • Insert 函数是可以用来没有元素的时候,增加元素的
  • Init(或者Create )函数一般只用来分配空间等的初始化
//动态分配空间的顺序存储结构的线性表
#include<stdio.h>
#include<stdlib.h>#define Linitesize 100
#define Laddsize 10
#define OK 1
#define error 0typedef int Status;
typedef int Elemtype;
typedef struct{Elemtype * elem;int length;int listsize;
}SqList;
void Show(SqList L)
{int i;for(i=0;i<L.length ;i++)printf("%d ",L.elem[i]);printf("\n");return ;
}
Status Create(SqList &L)
{L.elem = (Elemtype *)malloc(Linitesize*sizeof(Elemtype));if(!(L.elem ))return error;L.length = 0;L.listsize = Linitesize;return OK;
} 
//在第i个元素之前插入 ,从1开始计数,就是下标为i
Status Insert(SqList &L,int i,Elemtype e)
{int j;if(i<1||i>L.length+1 )return error;if(L.length>=L.listsize){L.elem =(Elemtype *)realloc(L.elem ,(L.listsize + Laddsize)*sizeof(Elemtype));if(!(L.elem ))return error;L.listsize = L.listsize + Laddsize;}for(j=L.length-1 ;j>=i-1;j--)L.elem[j+1] = L.elem[j];L.elem[i-1] = e;L.length ++;return OK;} 
//i为你想要删除的第几个元素 
Status Delete(SqList &L,int i,Elemtype &e)
{int j;if(i<1||i>L.length )return error;e = L.elem[i-1];for(j=i-1;j<L.length-1;j++)L.elem[j] = L.elem[j+1];L.length --;return OK;
}int main()
{int i,j;Elemtype e;SqList L;Create(L);for(i=1;i<=5;i++)Insert(L,i,i*i);	printf("输出具体数据:\n");Show(L);printf("请输入你想要删除第几个元素:\n");scanf("%d",&j);Delete(L,j,e);printf("删除的数据是:%d \n",e);Show(L);return 0;
}

考点

  • 两个有序递增的顺序表的合并

关键点,可以学到什么,就是分别用pa,pb,pc,来记录首地址,一句话,就是用辅助变量来方便操作

void Merge(Sqlist la,Sqlist lb,Sqlist &lc)
//目标,将原本有序递增的la,pb顺序表整合到lc ,lc认为有序递增的
{pa = la.elem;pb = la.elem;lc.listsize = lc.length = la.length + lb.length;pc =lc.elem = (ElemType *)malloc(lc.listsize*(sizeof(ElemType)));if(!lc.elem)exit OVERFLOW;pa_last = pa + la.length-1;pb_last = pb + lb.length-1;while(pa<=pa_last&&pb<=pb_last){if(*pa<*pb) *pc++ = *pa++;else *pc++ = *pb++;}while(pa<=pa_last) *pc++ = *pa++;while(pb<=pb_last) *pc++ = *pb++;}

顺序表优点与缺点

  • 优点:可以随便进行数据的插入与删除
  • 优点:占据较少的空间
  • 缺点:需要连续的一串地址
  • 缺点:在插入与删除时,要移动大量的元素

链式存储

在这里插入图片描述

//动态分配空间的顺序存储结构的线性表
#include<stdio.h>
#include<stdlib.h>#define Linitesize 100
#define Laddsize 10
#define OK 1
#define error 0typedef int Status;
typedef int Elemtype;typedef struct LNode{struct LNode * next;Elemtype data;
}LNode,*LinkList;
int Length(LinkList L)
{int sum=0;while(L->next !=NULL){sum++;L=L->next ;}return sum;
}
//尾插法 
Status Create(LinkList &L,Elemtype e)
{LinkList p = L;//开始p 指向头结点 while(p->next !=NULL )//找到最后一个结点 p=p->next ;LinkList temp = (LNode *)malloc(sizeof(Elemtype));if(!temp) return error;temp->data = e;//由于p 指向最后一个结点,那么p->next 进行赋值,实际上会改变原来的数据temp->next = p->next ;p->next = temp;return OK;}
Status Show(LinkList L)
{LinkList p = L->next  ;while(p !=NULL){printf("%d ",p->data );p = p->next ;}printf("\n");return OK;
}
//在第i 个元素之前插入 ,确保不超过范围 
Status Insert(LinkList &L,int i,Elemtype e)
{if(i<1||i>Length(L)+1)return error;LinkList p = L;//指向头结点//找到第i-1个结点int j ;for(j=1;j<i;j++)p = p->next ; LinkList temp = (LNode * )malloc(sizeof(LNode));if(!temp) return error;temp->data = e;temp->next = p->next ;p->next = temp;return OK;
}
Status Delete(LinkList &L,int i,Elemtype &e)
{//删除第i 个元素,并返回其值if(i<1||i>Length(L))return error;//找到第i-1个结点int j;LinkList temp = L;for(j=1;j<i;j++)temp = temp->next ;e = temp->next->data;temp->next = temp->next->next;return OK;
}
int main()
{Elemtype e;LinkList L = (LNode *)malloc(sizeof(LNode));L->next = NULL;for(int i = 1;i<= 5;i++)Create(L,i);Show(L);Insert(L,2,10);Show(L);Delete(L,3,e);Show(L);printf("%d \n",e);return 0;}

应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go atexit源码分析

文章目录 atexit源码解析UML类图样例一: 程序退出之前执行注册函数1.1 流程图1.2 代码分析 样例二&#xff1a;使用cancel取消注册函数2.1 cancel流程图2.2 代码分析 样例三&#xff1a;使用Fatal/Fatalln/Fatal执行注册函数3.1 Fatal/Fatalln/Fatal流程图3.2 代码分析 atexit源…

Android平台GB28181设备接入模块开发填坑指南

技术背景 为什么要开发Android平台GB28181设备接入模块&#xff1f;这个问题不再赘述&#xff0c;在做Android平台GB28181客户端的时候&#xff0c;媒体数据这块&#xff0c;我们已经有了很好的积累&#xff0c;因为在此之前&#xff0c;我们就开发了非常成熟的RTMP推送、轻量…

Scannet v2 数据集介绍以及子集下载展示

Scannet v2 数据集介绍以及子集下载展示 文章目录 Scannet v2 数据集介绍以及子集下载展示参考数据集简介子集scannet_frames_25kscannet_frames_test 下载脚本 download_scannetv2.py 参考 scannet数据集简介和下载-CSDN博客 scannet v2 数据集下载_scannetv2数据集_蓝羽飞鸟的…

BeanUtil的正确使用方式

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 在实际的开发中&#xff0c;我们常常会用到工具类去拷贝对象的属性&#xff0c;将一个对象的属性转换成另外一个…

球面的表面积

此推导需要用到重积分的知识&#xff0c;另外关于曲面的面积公式可以看我之前的博客

百度AI布局:从财报看百度的核心竞争力和未来发展方向

百度是中国最大的搜索引擎&#xff0c;也是全球领先的人工智能&#xff08;AI&#xff09;公司。百度在2023年第三季度业绩中&#xff0c;展示了其在AI领域的强劲表现和广阔前景。 百度财报透露了关于AI业务的哪些重要信息&#xff1f; 百度在2023年第三季度的财报中&#xf…

机器学习:攻击方法FGSM系列

任务 FGSM I-FGSM MI-FGSM Ensemble Attack 攻击评价指标 准确率越低表明攻击越好 数据 预训练模型 BaseLine 实践

***Linux常用命令及解释

1、查看Linux的版本信息 1.1、uname -a 1.2、cat /etc/issue 1.3、cat /proc/version 1.4、hostnamectl 通过使用hostnamectl命令&#xff0c;可以查询和更改系统主机名&#xff0c;并且还可以查看Linux的发行版和内核版本。 2、删除文件 3、修改目录权限 4、解压文件 5、…

探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示

&#x1f490;作者&#xff1a;insist-- &#x1f490;个人主页&#xff1a;insist-- 的个人主页 理想主义的花&#xff0c;最终会盛开在浪漫主义的土壤里&#xff0c;我们的热情永远不会熄灭&#xff0c;在现实平凡中&#xff0c;我们终将上岸&#xff0c;阳光万里 ❤️欢迎点…

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录 Spring的依赖注入依赖注入的基本原则依赖注入有什么优势查找定位操作与应用代码完全无关。有哪些不同类型的依赖注入实现方式&#xff1f;构造器依赖注入和 Setter方法注入的区别 Spring的依赖注入 控制反转IoC是一个很大的概念&#xff0c;可以用不同的方式来实现。…

android系统新特性——用户界面以及系统界面改进

用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言&#xff0c;它是一套完整的设计系统&#xff0c;包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述&#xff0c;让开发者设计出更符合目标的软件&#xff0c…

vue3+elementPlus之侧边菜单栏功能

选择默认的颜色&#xff0c;将代码拷贝至<el-aside>模块中 稍微把不需要的修改一下。 <template><div class"common-layout"><el-container><el-header class"homeHeader"><div class"headerTitle">Devops…

vue怎么实现国际化? vue-i18n 插件实现国际化,支持切换不同语言

依赖的文档开始 | Vue I18n 一、安装 npm install vue-i18n 如果在一个模块系统中使用它&#xff0c;你必须通过 Vue.use() 明确地安装 vue-i18n&#xff1a; import Vue from vue import VueI18n from vue-i18nVue.use(VueI18n)二、使用 在 src 下创建 lang 文件夹 1.准…

实现【Linux--NTP 时间同步服务搭建】

实现【Linux--NTP 时间同步服务搭建】 &#x1f53b; 前言&#x1f53b; 一、NTP 校时&#x1f530; 1.1 NTP 服务校时与 ntpdate 校时的区别&#x1f530; 1.2 NTP 校时服务搭建&#x1f530; 1.2.1 确认 ntp 的安装&#x1f530; 1.2.2 配置 ntp 服务&#x1f530; 1.2.3 启动…

大数据面试大厂真题【附答案详细解析】

1.Java基础篇&#xff08;阿里、蚂蚁、字节、携程、快手、杭州银行等&#xff09; 问题&#xff1a;HashMap的底层实现原理 答案&#xff1a; 在jdk1.8之前&#xff0c;hashmap由 数组-链表数据结构组成&#xff0c;在jdk1.8之后hashmap由 数组-链表-红黑树数据结构组成&…

openpnp - 给底部相机加防尘罩

文章目录 openpnp - 给底部相机加防尘罩概述笔记END openpnp - 给底部相机加防尘罩 概述 设备标定完, 看着底部相机, 有点担心掉进去东西, 万一从吸嘴掉下去的料(或者清理设备台面时, 不小心掉进去东西)将顶部相机搞短路怎么办. 就想加个防尘罩, 如果有东西掉进去, 可以掉到机…

makefile 学习(5)完整的makefile模板

参考自&#xff1a; (1&#xff09;深度学习部署笔记(二): g, makefile语法&#xff0c;makefile自己的CUDA编程模板(2&#xff09;https://zhuanlan.zhihu.com/p/396448133(3) 一个挺好的工程模板&#xff0c;(https://github.com/shouxieai/cpp-proj-template) 1. c 编译流…

开源vs闭源,处在大模型洪流中,向何处去?

文章目录 一、开源和闭源的优劣势比较1.1 开源优势1.2 闭源的优势 二、开源和闭源对大模型技术发展的影响2.1 数据共享2.2 算法创新2.3 业务拓展2.4 安全性和隐私2.5 社会责任和伦理 三、开源与闭源的商业模式比较3.1 盈利模式3.2 市场竞争3.3 用户生态3.4 创新速度 四&#xf…

shiro的前后端分离模式

shiro的前后端分离模式 前言&#xff1a;在上一篇《shiro的简单认证和授权》中介绍了shiro的搭建&#xff0c;默认情况下&#xff0c;shiro是通过设置cookie&#xff0c;使前端请求带有“JSESSION”cookie&#xff0c;后端通过获取该cookie判断用户是否登录以及授权。但是在前…

TCP/IP协议、三次握手、四次挥手

TCP/IP TCP/IP协议分层TCP头部三次握手TCP四次挥手常见问题1、什么是TCP网络分层2、TCP为什么是三次握手&#xff0c;不是两次或者四次&#xff1f;3、TCP为什么是四次挥手&#xff0c;为什么不能是三次挥手将第二次挥手和第三次挥手合并&#xff1f;4、四次挥手时为什么TIME_W…