数据结构(c语言版本)

article/2025/9/15 18:38:43

1.基本概念

1.1数据

对客观事物的符号表示,在计算机与科学中是指所有能输入到计算机并被计算机程序处理的符号的总称。

1.2数据元素

是数据的基本单位,在计算机程序中作为一个整体进行考虑和处理

1.3数据对象

是相同性质数据元素的集合,是数据的一个子集

1.4数据结构

是相互间存在一种或多种特点关系的数据元素的集合

 1.4.1集合

除了同属一个集合没有其他关系

1.4.2 线性结构

一对一关系

1.4.3树形结构

一对多关系

1.4.4图状结构或者网状结构

多对多关系

1.5二元组

数据结构形式定义

Data_str=(D,S)

d:数据元素有限集;s:d上关系的有些集

eg:定义复数

complex(C,R)

c,是含有两个实数,{c1,c2}的集合 R={p},p是定义的一种关系{<c1,c2>}不可换位,第一个是实部,第二个是虚部

1.6数据结构

数据结构分为逻辑结构和存储结构

逻辑结构是集合,线性,树形,网状

存储结构分顺序存储和链式存储结构

! 算法的设计取决于逻辑结构,算法实现取决于存储结构

1.7数据类型

是一个值的集合和定义在这个值集上的一组操作的总称

抽象数据类型

又叫ADT。定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关

抽象数据类型和数据类型其实是一个概念

定义:

ADT 抽象数据类型名{

抽象数据对象:<数据对象的定义>

数据关系:<数据关系定义>

基本操作: <基本操作定义>

}ADT 抽象数据类型名

基本操作名(参数表)

初始条件:<初始条件定义>

操作结果:<操作结果描述>

赋值参数仅为操作提供输入值;引用参数以 & 开头,除了提供输入值,还会返回操作结果

eg:

ADT TRyouts{

抽象数据对象:D={e1,e2,e3|e1,e2,e3属于ElemSet}

数据关系:R1={<e1,e2>,<e2,e3>}

基本操作: <基本操作定义>

}ADT TRyouts

InitTriplet(&T,v1,v2,v3)

操作结果:构造三元组

DestroyTriple(&T)

操作结果:摧毁三元组

Put(T,i,&T)

初始条件:三元组存在

操作结果:改变第i元值

......

其他操作类似

} ADT TRyouts

2:算法书写的不一样

(1)预定义和类型

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIVBLE -1

#define OVERFLOW -2

Typedef int Status;返回为结果状态代码

元素类型默认ElemType,可以自定义

(2)基本操作

函数类型 函数名(参数表){

//算法说明

语句序列

}//函数名

(3)赋值语句

 

 

eg

采用动态分配顺序存储结构

Typedef ElemType *Triplet;//由 InitTriplet分配3个存储空间

Status InitTriplet(Triplet &T);

//构造3元组

Status DestroyTriple(Triplet T);

//操作结果:3元组被摧毁

Status Get(Triplet T,int i,ElemType &e);

//初始条件:3元组存在,且i在1~3

//操作结果:用e返回T里面第i个值

Status Put(Triplet &T,int i,ElemType e);

//初始条件:3元组存在,且i在1~3

//操作结果:改变T第i个元素为e

.......

基本操作实现

Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3){




算法和算法分析

1.算法

算法定义:对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令都表示一个或者多个操作;

算法特性:

有穷性,确定性,可行性,输入,输出

算法设计要求

正确性,可读性,健壮性,效率与低存储量需求

算法效率度量

1.事后统计:缺陷~必须先运行算法编程的程序,所得时间统计量依赖于计算机的软件硬件等,容易覆盖算法本身优势

2.事前估计:主要看问题规模,书写语言,机器代码质量

时间复杂度

全称:算法的渐近时间复杂度

看最深层次循环内语句原操作,看它重复次数

空间复杂度

看辅助空间(中间变量)空间不值钱,主要考虑时间复杂度


http://chatgpt.dhexx.cn/article/FMthSl66.shtml

相关文章

c语言数据结构

目录 一、数据结构构造概述 1.1、什么是数据结构 1.2、数据的逻辑结构的4种分类 二、线性表 2.1、线性表概述 2.2、顺序表 2.3、链表 2.3.1、链表节点的创建 2.3.2、链表结点遍历 2.3.3、链表结点删除 2.3.4、链表的插入 ​ 三、栈和队列 3.1、栈概述 3.2、栈…

C语言数据结构知识点小结(全)

Catologue C语言数据结构一、基本概念和术语二、时间、空间复杂度&#xff08;1&#xff09;时间复杂度&#xff08;2&#xff09;空间复杂度 三、类C语言有关操作补充1&#xff1a;数组定义补充2&#xff1a;动态内存分配补充3&#xff1a;C中的参数传递 四、线性表&#xff0…

七丶青龙nvjdc部署教程+短信验证登录对接傻妞

青龙nvjdc部署教程短信验证登录对接傻妞Nolanjdc 没有服务器的先自行购买&#xff0c;这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 傻妞机器人安装教程 XDD安装教程 QQ交流&#xff1a;1014549449 --------------点击跳转 注丶只能对接一个&#xff0c;要么对接…

手机短信验证

在项目中经常会用到手机短信验证注册&#xff0c;登录等功能&#xff0c;所以我想写一篇文章来给大家提供一个参考。 阿里大于-个人感觉比较好用的短信验证平台&#xff0c;下面是接入阿里大于sdk的步骤。 阿里大于官网&#xff1a;直通车, 进入官网需要注册&#xff0c;注册…

014_关于session实现短信验证登录的前端启动

014_关于session实现短信验证登录的前端启动 1、进入到nginx相对应的文件夹&#xff0c;shfit右键&#xff0c;进入PowerShell并且执行nginx 2、启动我们的nginx,嘿嘿&#xff0c;可以访问我们的前端网页啦&#xff01;&#xff01;&#xff01;它就是模仿我们的大众点评来着…

基于Redis的短信验证登录

基于Redis的短信验证登录 1、用户调用发送短信验证码接口2、用户调用登录/注册接口3、用户调用校验接口4、SpringMvc拦截器注册5、token刷新拦截器6、登录拦截器 1、用户调用发送短信验证码接口 用户调用sendCode()接口&#xff0c;把phone传到后端&#xff0c;后端对phone进行…

使用聚合数据短信API测试(短信验证登录)

搞一手聚合数据短信API测试&#xff08;之前用阿里云的搞过&#xff0c;今天我们用聚合&#xff09; 注册聚合账号&#xff01;聚合官网链接登陆后进入短信服务API&#xff08;免费提供十次&#xff09; 添加自定义模板&#xff08;审核速度看脸&#xff09; 审核成功后得…

android studio 实现短信验证 登录

登录 http://www.mob.com/ 注册 创建项目 加入依赖 贴代码 classpath “com.mob.sdk:MobSDK:2018.0319.1724” apply plugin: ‘com.mob.sdk’ // 在MobSDK的扩展中注册SMSSDK的相关信息 这里使用自己的 appKey appSecret MobSDK {appKey “2e2974aec0” appSecret “1d35b87…

Java简单实现短信验证登录(Session、Redis)

前端设计 <div class"login-form"><div style"display: flex; justify-content: space-between"><el-input style"width: 60%" placeholder"请输入手机号" v-model"form.phone" ></el-input><e…

Vue与Node.js实现手机短信验证登录

手机短信使用的第三方平台是联容云&#xff0c;注册就送8块钱体验费&#xff0c;足够自己用用了&#xff0c;注册完自己建一个应用就能拿到需要使用的配置了&#xff0c;如图 注册完之后1就可以使用了。 Node.js后端使用了Express框架 "js-base64": "^3.7.2&qu…

【青龙面板+诺兰2.0 网页短信验证登录+bot查询】

看这个之前&#xff0c;如果是没搭建过的先看下面这篇哈&#xff0c;如果是跟着下面的搭建完了&#xff0c;出现了机器人5次获取验证码失败&#xff0c;让你用Cookie方式登录的情况&#xff0c;看这篇哈。 前提&#xff1a;自己有服务器&#xff01;这里用的Centos7.6做演示&am…

Springboot实现短信登录验证

Springboot学习笔记——Java实现短信登录验证功能--Servlet/SSM/SpringBoot都可以用 小白记录一下短信验证登入的实现&#xff0c;方便以后可以拿来直接用。 发短信平台&#xff1a;互亿无线 官网地址 登入注册啥的就不说了&#xff0c;新人注册会送十条短信验证&#xff0c;想…

java WEB调用秒嘀科技短信验证接口(实现短信验证登录)

java WEB调用秒嘀科技短信验证接口&#xff08;实现短信验证登录&#xff09; 前言注册秒嘀云账号登录秒嘀云官网 代码 前言 短信验证登咱就不多说了&#xff0c;为什么推荐用秒嘀的呢&#xff0c;应为他会送你10元钱&#xff0c;对于新手来说10元钱&#xff0c;足够你玩了。但…

Android利用mob实现短信验证登录

首先要去官网申请一个应用&#xff0c;拿到对应的APPKEY以及APPSECRET 附上直通车链接MobTech 申请应用基本是秒批&#xff0c;然后就可以得到应用的APPKEY以及APPSECRET 然后就是查看官方的文档 直接跟着步骤走&#xff0c;可以不用手动下载sdk&#xff0c;导入这些它自动会帮…

微信小程序短信验证登录

首先小程序wxml页面 <!--pages/logins/logins.wxml--> <view class"container"><view class"title">登录</view><form catchsubmit"login"><view class"inputView"><input class"inputT…

Springboot实现短信验证登录

一、介绍 使用短信验证登录也是现在实际项目中普遍使用的一种登录, 二、实际的操作流程 1.用户在前端页面输入手机号码之后,点击发送验证码 2.前端将手机号传给后端 3.后端生成一个6为的随机数通过短信发送给用户,之后将手机号设为key,验证码设为value存入redis缓存中…

html短信验证登录

最近在做项目中遇到了一个问题&#xff0c;做的是一个后台管理。都知道&#xff0c;后台是需要一定安全性的&#xff0c;所以一定要有登录这个功能的。然而登录这个功能&#xff0c;又有一个不可或缺的因素&#xff0c;那就是验证登录。不论是图形验证也好&#xff0c;还是什么…

spring security——短信验证码登录(四)

一、导读 短信登录和用户名密码登录的逻辑是不同的&#xff0c;Spring Security 框架中实现的是用户名密码的登录方式。现在我们就模仿它的原理来加入短信登录的认证&#xff08;注意不是验证&#xff09;&#xff0c;实现右边的。 之前写的图形验证码是在 UsernamePasswordAut…

雅克比矩阵求导推导

首先&#xff0c;引入雅克比矩阵公式&#xff1a; J [ u 1 u 2 ⋯ u n e 1 e 2 ⋯ e n ] \mathbf{J}\left[\begin{array}{c} \begin{array}{lll}\mathbf{u}_{1} & \mathbf{u}_{2} & \cdots & \mathbf{u}_{n}\end{array} \\ \begin{array}{lll}\mathbf{e}_{1} &…

矩阵求导公式

转自&#xff1a;http://blog.sina.com.cn/s/blog_4a033b090100pwjq.html 求导公式(撇号为转置&#xff09;&#xff1a; Y A * X --> DY/DX A Y X * A --> DY/DX A Y A * X * B --> DY/DX A * B Y A * X * B --> DY/DX B * A 乘积的导数 d(f*g)/dx(df/dx)…