数据结构 基本概念和述语

2024-09-07 04:48

本文主要是介绍数据结构 基本概念和述语,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据结构

  • 基本概念和述语
    • 数据(data)
    • 数据元素(data element)
    • 数据项(data item)
    • 数据对象(data object)
    • 数据结构(data structure)
    • 逻辑结构与物理结构
      • 逻辑结构
      • 物理结构
    • 抽象数据类型(Abstract Data Type, ADT):
      • 数据类型:
      • 抽象数据类型三元组的定义:
      • 抽象数据类型的表示与实现
      • 抽象数据类型Triplet的表示和实现:
    • 算法和算法分析
      • 算法:
      • 算法的5个重要特性:
      • 算法设计的要求:
    • 算法的效率的度量方法
      • 算法时间复杂度 T(n) = O(f(n))
      • 推导大O阶方法

基本概念和述语

数据(data)

是对客观事物的符号表示,是计算机中可以操作的对象,能被计算机程序处理的总称。

数据元素(data element)

是数据的基本单位,在计算机程序中通常做为一个整体进行考虑和处理,也被称为记录。
是组成数据的,有一定意义的基本单位,

数据项(data item)

一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。

数据对象(data object)

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

数据结构(data structure)

是相互之间存在一种或多种特定关系的数据元素的集合。
通常有下列4类基本结构:

  1. 集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。
  2. 线性结构:结构中的数据元素之间存在一个对一个的关系。
  3. 树形结构:结构中的数据元素之间存在一个对多个的关系。
  4. 图状结构或网状结构:结构中的数据元素之间存在多个对多个的关系。
    在这里插入图片描述

逻辑结构与物理结构

逻辑结构

逻辑结构是指数据对象中数据元素之间的相互关系。

物理结构

物理结构:是指数据的逻辑结构在计算机中的存储形式。
顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

抽象数据类型(Abstract Data Type, ADT):

数据类型:

是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作.

ADT 抽象数据类型名 {数据对象:<数据对象的定义>数据关系:<数据关系的定义>基本操作:<基本操作的定义>
}ADT 抽象数据类型名
其中,数据对象和数据关系的定义用伪码描述,基本操作的定义格式为
基本操作名(参数表)初始条件:<初始条件描述>操作结果:<操作结果描述>

抽象数据类型三元组的定义:

ADT Triplet {数据对象:D={e1,e2,e3|e1,e2,e3属于ElemSet}数据关系:R1={<e1,e2>,<e2,e3>}基本操作:IinitTriplet(&T, v1,v2,v3)操作结果:构造了三元组T,元素e1,e2和e3分别被赋以参数,v1,v2,v3的值。DestroyTriplet(&T)操作结果:三元组T被销毁Get(T, i, &e)初始条件:三元组T已存在,1<= i <=3操作结果:用e返回T的第i个元素的值。Put(&T, i, e)初始条件:三元组T已存在,1<= i <=3操作结果:改变T的第i个元素的值为e。IsAscending(T)初始条件:三元组T已存在。操作结果:如果T的3个元素按升序排列,则返回1,否则返回0.IsDescending(T)初始条件:三元组T已存在。操作结果:如果T的3个元素按降序排列,则返回1,否则返回0.Max(T, &e)初始条件:三元组T已存在。操作结果:用e返回T的3个元素中的最大值。Min(T, &e)初始条件:三元组T已存在。操作结果:用e返回T的3个元素中的最小值。
}ADT Triplet

抽象数据类型的表示与实现

1.预定义常量和类型:
//函数结果状态代码
#define TRUE 		1
#define FALSE 		0
#define OK			1
#define ERROR		0
#define INFEASIBLE	-1
#define OVERFLOW	-2//Status是函数的类型,其值是函数结果状态代码
typedef int Status;2.数据结构的表示(存储结构)用类型定义(typedef)描述。数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义。3.基本操作的算法都用以下形式的函数描述:函数类型 函数名 (函数参数表) {// 算法说明语名序列} //函数名

抽象数据类型Triplet的表示和实现:

// 采用动态分配的顺序存储结构
typedef ElemType *Triplet; // 由InitTriplet分配3个元素存储空间
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3);
Status DestroyTriplet(Triplet &T);
Status Get(Triplet T, int i, ElemType &e);
Status Put(Triplet &T, int i, ElemType e);
Status IsAscending(Triplet T);
Status IsDescending(Triplet T);
Status Max(Triplet T, ElemType &e);
Status Min(Triplet T, ElemType &e);//基本操作的实现
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3) {// 构造三元组T,依次置T的3个元素置为v1,v2,v3T = (ElemType *)malloc(3 * sizeof(ElemType));if (!T)exit(OVERLOW);T[0] = v1; T[1] = v2; T[2] = v3;return OK;
} // InitTripletStatus DestroyTriplet(Triplet &T) {//销毁三元组T。free(T); T=NULL;retrun OK;
} //DestroyTripletStatus Get(Triplet T, int i, ElemType &e) {//1<=i<=3,用e返回T的第i元素if (i<1 || i>3) return ERROR;e = T[i-1];return OK;
} //GetStatus Put(Triplet &T, int i, ElemType e) {// 1<=i<=3, 置T的第i元素的值为eif (i<1 || i>3) return ERROR;T[i-1] = e;return OK;
} // PutStatus IsAscending(Triplet T) {//如果T的3个元素是按升序排列,则返回1,否则返回0;return (T[0] <= T[1]) && (T[1] <= T[2]);
} //IsAscendingStatus IsDescending(Triplet T) {//如果T的3个元素是按降序排列,则返回1,否则返回0;return (T[0] >= T[1]) && (T[1] >= T[2]);
} //IsDescendingStatus Max(Triplet T, ElemType &e) {//用e返回指向T的最大元素的值。e = (T[0] >= T[1])? ((T[0]>=T[2])?T[0]:T[2]) : ((T[1] >= T[2]) ? T[1] : T[2]);return OK;
}; //MaxStatus Min(Triplet T, ElemType &e) {//用e返回指向T的最大元素的值。e = (T[0] <= T[1])? ((T[0]<=T[2])?T[0]:T[2]) : ((T[1] <= T[2]) ? T[1] : T[2]);return OK;
}; //Min

算法和算法分析

算法:

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

算法的5个重要特性:

1.有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
2.确定性:算法的每一步骤都具有确定的含义,不会出现二义性。
3.可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。
4.输入:算法具有零个或多个输入
5.输出:算法至少有一个或多个输出

算法设计的要求:

1.正确性:是指算法至少应该具有输入,输出和加工处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案。
2.可读性:算法设计的另一目的是为了便于阅读,理解。
3.健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
4.效率与低存储量需求:设计算法应该尽量满足时间效率高和存储量低的需求。

算法的效率的度量方法

算法时间复杂度 T(n) = O(f(n))

推导大O阶方法

1.用常数1取代运行时间中的所有加法常数。
2.在修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数,得到的结果就是大O阶
常数阶 O(1)
线性阶 分析算法的复杂度,关键就是要分析循环结构的运行情况 O(n)
对数阶 O(logn)
平方阶 O(n^2)

算法空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n) = O(f(n)),其中,n为问题的模,f(n)为语句关于n所占存储空间的函数。

这篇关于数据结构 基本概念和述语的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144097

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

Python 内置的一些数据结构

文章目录 1. 列表 (List)2. 元组 (Tuple)3. 字典 (Dictionary)4. 集合 (Set)5. 字符串 (String) Python 提供了几种内置的数据结构来存储和操作数据,每种都有其独特的特点和用途。下面是一些常用的数据结构及其简要说明: 1. 列表 (List) 列表是一种可变的有序集合,可以存放任意类型的数据。列表中的元素可以通过索

【Rocketmq入门-基本概念】

Rocketmq入门-基本概念 名词解释名称服务器(NameServer)消息队列(Message Queue)主题(Topic)标签(Tag)生产者(Producer)消费者(Consumer)拉取模式(Pull)推送模式(Push)消息模型(Message Model) 关键组件Broker消息存储工作流程 名词解释 名称服务器(NameServer) 定义: 名称服务器

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo