首页 > 编程语言 >数据结构day01(数据结构、算法基础知识)

数据结构day01(数据结构、算法基础知识)

时间:2024-08-20 10:56:00浏览次数:17  
标签:存储 day01 元素 基础知识 算法 数据结构 数据 结构

目录

【1】数据结构基础知识

1》什么是数据结构

2》数据

 3》逻辑结构

1>线性关系

2>层次关系

3>网状关系

4》存储结构 

 1>顺序存储

 2>链式存储

3>索引存储结构

 4>散列存储

 5》操作

【2】算法基础知识

1> 什么是算法

 2> 算法设计

 3> 算法的特性

 4> 评价算法的好坏

5> 计算大 O 的方法


【1】数据结构基础知识

1》什么是数据结构

数据结构就是数据的逻辑结构存储结构以及操作(类似数据的运算)

数据结构的最终目的就是:如何更高效的存储数据

2》数据

数据:所有能被输入到计算机并被处理的符号的集合

数据元素:数据的基本单位,由若干个数据项组成(又叫节点

数据项:构成数据的不可分割的最小单位

数据对象:相同性质的数据元素的集合,是数据的子集

数据类型:一个值的集合和定义在这个集合上的一组操作的总称

例:

计算机处理的对象不再是单纯的数值

而是如下表的类似集合的数据:

在这个表中

数据:图书

数据元素:每一本书

数据项:编号、书名、作者、出版社.....

 3》逻辑结构

数据元素不是孤立存在的,它们之间存在着某种逻辑关系

1>线性关系

线性结构:结构中的数据元素之间只存在一对一的关系

线性表:顺序表、链表、栈、队列

2>层次关系

树形结构:结构中的数据元素之间存在一对多的关系

:一般树、二叉树

3>网状关系

图状结构(网状结构):结构中的数据元素之间存在多对多的关系

:有向图、无向图

4》存储结构 

数据结构在计算机中的表示,也称物理结构

 1>顺序存储

把逻辑上相邻的元素存储在物理位置上相邻的存储单元里,通过存储单元的邻接关系来表示元素之间的逻辑关系

内存连续

优点:实现随机存储,每个元素占用空间小

缺点:只能使用相邻的一整块存储单元,会产生较多外部碎片

实现:数组

 2>链式存储

不要求逻辑上相邻的元素在物理位置上也相邻,通过指针表示元素之间的逻辑关系

内存不连续

优点:不会出现碎片现象,充分利用所有存储单元

缺点:每个元素要占用存储指针,需要多占用存储空间,而且只能顺序存取

实现:结构体

代码实现:

#include <stdio.h>

struct Node//定义结构体
{
    int data;//数据域
    struct Node *next;//指针域
};

int main(int argc, char const *argv[])
{
    struct Node A = {1,NULL};//定义结构体变量并赋值
    struct Node B = {2,NULL};
    struct Node C = {3,NULL};    

    //把3个节点连接起来
    A.next = &B;//将B节点的地址放到A节点的指针域中,即把A和B连接起来
    B.next = &C;

    printf("%d",A.data);//打印
    printf("%d",(A.next)->data);
    printf("%d",(A.next)->next->data);
    return 0;
}
3>索引存储结构

存储信息的同时,建立覅接的索引表,索引表中每一项成为索引项,索引项的一般形式(关键字,地址)

优点:检索速度快

缺点:增加索引表,占用较多存储空间,增删数据是也要修改索引表,花费更多时间

例:

 4>散列存储

根据元素的关键字直接计算出该元素的存储位置,也称Hash存储

按关系存,按关系取

优点:检索,增删节点操作都很快

缺点:散列函数不好可能会出现元素存储单元的冲突,解决冲突会增加时间 ,空间的开销。

 5》操作

增删查改

【2】算法基础知识

1> 什么是算法

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

数据结构 + 算法 = 程序

 2> 算法设计

算法的设计:取决于数据的逻辑结构

算法的实现:依赖于数据的存储结构

 3> 算法的特性

有穷性:步骤是有限的

确定性:每一个步骤都有明确的含义,无二义性

可行性:在规定时间内都可以完成

输入

输出

 4> 评价算法的好坏

正确性

易读性

健壮性:容错处理

高效性:执行效率,通过重复执行语句的次数来判断,也就是时间复杂度(时间处理函数)来判断。


时间复杂度

语句频度:用时间规模函数表达

时间规模函数:T(n) = O(f(n))

T(n) :时间规模的时间函数

O : 时间数量级

n :问题规模

f(n) :算法可重复语句的次数

称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度

渐进时间复杂度用大写 O 来表示,所以也被称为大 O 表示法。时间复杂度就是把时间规模函数T(n) 简化为一个数量级 ,如n ,n^2 ,n^3.

例:

求1+2+3+4+...+n的和

算法1:

int sum=0;
for(int i=1;i<=n;i++)
{
    sum += i; //重复执行n次
}

f(n) = n   ==>   T(n) = O(n)

算法2:

利用等差数列前n项和公式:Sn=n*a1+n(n-1)d/2 或 Sn=n(a1+an)/2 (d是公差)

int sum = (1+n)*n/2;   //重复执行1次

f(n) = 1   ==>  T(n) = O(1)

很显然,第二种算法的时间复杂度要低一些,效率更高。

5> 计算大 O 的方法

1.根据问题规模n写出表达式f(n)

2.如果有常数项,将其置为1 //当f(n)的表达式中只有常数项,例如f(n) = 8 ==> O(1)

3.只保留最高项,其他项舍去。

4.如果最高项系数不为1,则除以最高项系数。

标签:存储,day01,元素,基础知识,算法,数据结构,数据,结构
From: https://blog.csdn.net/dghbs/article/details/141340097

相关文章

  • Python数据结构:元组详解(创建、访问、不可变特性)②
    @[toc]Python中的元组(Tuple)是一种重要的数据结构,与列表类似,但元组是不可变的,这意味着一旦创建,就无法修改。元组的不可变性使其在某些场景下比列表更具优势。本文将详细介绍Python元组的创建、访问、不可变特性,并附上一个综合复杂的例子,全面展示元组在实际编程中的应用。一......
  • 【数据结构与算法第一章】编程基础:变量与数据类型、指针、结构体、数组与链表、程序结
    目录【数据结构与算法第一章】编程基础1.1变量与数据类型1.2指针1.3结构体1.4数组和链表1.5程序结构1.6函数中参数的传递1.7C语言中运算符的含义【数据结构与算法第一章】编程基础1.1变量与数据类型变量:    ①在C语言中,所有变量必须先声明后使用......
  • Java常见数据结构
    Java常见的数据结构:1.栈2.队列3.数组4.链表5.二叉树6.二叉查找树7.平衡二叉树8.红黑树9.哈希表1.栈特点:“先进后出,后进先出”基本操作:push(入栈):将元素推入栈中。pop(出栈):从栈中移除并返回顶部的元素。peek(或top):查看栈顶的元素,......
  • day03(数据结构)顺序表
    线性表线性表是最基本、最简单、也是最常用的一种数据结构,可以存储逻辑关系为线性的数据。线性表(linearlist)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。包含:顺序表(数组)、链表(单向链表、单向循环链表、双向链表、双向循环链表)、栈(顺序栈、链......
  • 多线程基础知识(一)
    多线程多线程​ 进程:正在运行的程序,是系统进行资源分配和调用对的独立单位,每一个进程都有它的内存空间和系统资源。可以理解为,一个正在运行的程序。​ 线程:是进程中的单个顺序控制流,是一条执行路径,一个进程如果只有一条执行路径,则称为单线程程序;一个进程如果有多条执行路径,则称......
  • 【网络安全入门】学习网络安全必须知道的100 个网络基础知识_网络安全知识入门基础_网
    什么是链接?链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。2OSI参考模型的层次是什么?有7个OSI层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。3什么是骨干网?骨干网络是集中的基础设施,旨在将不同的路由和数据......
  • lg根号数据结构
    根号数据结构序列分块通过将序列分成小段,整块标记,不足整块的暴力,以平衡修改查询的复杂度。如果两个操作的调用次数有较大差异,可以使用分块维护更多/更少信息来平衡两边的时间复杂度。请注意并非选择“更快”的数据结构就更好,比如树状数组看似更平衡,但是修改和询问的次数不平衡......
  • 数据结构与算法——滑动窗口
    目录引言核心思想使用场景解题步骤经典例题1、无重复字符的最长子串(LeetCode3)2、找到字符串中所有字母异位词(LeetCode438)引言定义:滑动窗口是指通过左右两个指针(或索引)来标记窗口的左右边界,随着指针的移动,窗口内的元素不断变化,从而实现对数组或字符串中连续子序列的......
  • 算法与数据结构——空间复杂度
    空间复杂度空间复杂度(spacecomplexity)用于衡量算法占用内存空间随着数据量变大时的增长趋势。这个概念与时间复杂度非常类似,只需将“运行时间”替换为“占用内存空间”。 算法相关空间算法在运行过程中使用的内存空间主要包括以下几种。输入空间:用于存储算法的输入数据。......
  • 【数据结构】详细介绍栈和队列,解析栈和队列每一处细节
    目录一.栈1. 栈的概念2. 栈的实现2.1栈的结构2.2初始化栈2.3入栈2.4出栈2.5获取栈顶元素2.6获取栈中有效个数2.7判断栈是否为空2.8销毁栈 二.队列1.队列的概念2.队列的实现 2.1队列的结构2.2队列初始化 2.3销毁队列 2.4入队列(队尾) ......