数据结构 绪论

数据结构——第一章:绪论 学习目标: 了解并理解数据,数据元素,数据结构,逻辑结构,存储结构,算法及算法设计-分析-时间复杂度等知识点。 1、绪论 一、数据结构的概念及其内容 数据结构是带有结构的数据元素的集合,其中的结构是指数据元素之间的相互关系,即数据的组织形式。 数据(data):描述客观事物的数,字符以及能输入计算机中并被计算机处理的符号的集合。如:整数,实数,字符串,当... 阅读详情

一、基本概念

 

        数据: 对客观事物的符号表示;在计算机科学中指能输入到计算机并被计算机程序处理的符号的总称。

        随着计算机应用领域的扩大,数据的范畴包括:整数、实数、字符串、图像和声音等。

 

        数据元素: 也称为记录、结点,是数据的基本单位,在计算机程序中作为一个整体来处理。一个数据元素可包含多个数据项。数据项是数据不可分割的最小单位。

        如一本书的书目信息是一个数据元素,它包含多个数据项,如书名、作者名、ISBN、价格等。

 

        数据对象: 是具有相同性质数据元素的集合,是数据的一个子集。

        如大写字母字符数据对象为集合C = {'A','B' ... 'Z'}。


        数据结构: 相互之间存在一种或多种特定关系的数据元素的集合,指数据之间的相互关系(此处指逻辑关系),即数据的组织形式。

 

        结构: 数据元素之间的关系。通常包括4类:集合、线性结构、树形结构、图形(网状)结构。

 

        数据结构的形式定义:

               Date_Structure = (D, S)

        其中D为数据元素的有限集,S为D上关系的有限集。


二、数据结构内涵

 

        数据结构指数据之间的关系(结构)。一般包括三方面的含义:

        逻辑结构:描述数据元素之间的逻辑关系,独立于计算机。可看做是从具体问题中抽象出来的数学模型。

        存储结构/物理结构:描述数据在计算机中的存储表示。依赖于计算机语言,相对逻辑结构来说它是具体的。

        数据的运算:数据可执行的操作,如插入、删除、排序等。定义在逻辑结构上,就是说我们只需知道这些操作“做什么”,而不需考虑如何实现这些操作,即“怎么做”。只有确定了存储结构后,才考虑如何实现这些操作。

 

        数据逻辑结构分类:

        线性结构:结构为非空集,有且只有一个开始结点和终端结点。每个元素至多只有一个直接前驱和一个直接后继。如:栈、队列、串。

        非线性结构:每个元素可以对应多个直接前驱和多个直接后继。如树、图等。

 

        数据存储结构分类:

        顺序存储:通过存储单元的邻接关系来表示数据的逻辑关系。逻辑上相邻的结点存储在物理上相邻的存储单元里,通常用数组来描述。

        链式存储:通过指示存储单元地址的指针来表示数据的逻辑关系。不要求逻辑相邻的元素在物理存储上相邻,通常用指针类型描述。

 

        同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。

 

        数据结构三方面的关系

        数据的逻辑结构、数据的存储结构及数据的运算这三方面是一个整体。孤立地去理解一个方面,而不注意它们之间的联系是不可取的。

        存储结构是数据结构不可缺少的一个方面:同一逻辑结构的不同存储结构可冠以不同的数据结构名称来标识。 

        【例】线性表是一种逻辑结构,若采用顺序方法的存储表示,可称其为顺序表;若采用链式存储方法,则可称其为链表。

        数据的运算也是数据结构不可分割的一个方面。在给定了数据的逻辑结构和存储结构之后,按定义的运算集合及其运算的性质不同,也可能导致完全不同的数据结构。

        【例】若对线性表上的插入、删除运算限制在表的一端进行,则该线性表称之为栈;若对插入限制在表的一端进行,而删除限制在表的另一端进行,则该线性表称之为队列。更进一步,若线性表采用顺序表或链表作为存储结构,则对插入和删除运算做了上述限制之后,可分别得到顺序栈或链栈,顺序队列或链队列。


三、数据类型和抽象数据类型 (ADT)

        数据类型:是一个值的集合以及定义在这个集合上的操作的总称。

        抽象数据类型:是指一个数学模型以及定义在该模型上的操作,是指抽象数据的组织和与之相关的操作。可以看作是数据的逻辑结构及其在逻辑结构上定义的操作。

        

        ADT可描述如下(以三元组为例):

        ADTTriplet{

         数据对象:D = {e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合)}

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

         基本操作:

                  InitTriplet(&T, v1, v2,v3)

                  操作结果:构造了三元组T,元素e1,e2,e3分别被赋以v1,v2,v3的值

                  DestoryTriplet(&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


         将Triplet编程实现如下:

         其中c1.h文件内容如下:



         其中triplet.h文件内容如下:

         

         其中triplet.cpp文件内容如下:





数据结构第一章绪论 这一章的主要内容在于了解数据结构的基本概念:包括基本概念和术语、数据结构的类型;学习算法的基本概念:包括算法的概念、评价一个算法优劣的标准、算法的时间复杂度和空间复杂度。 阅读详情

相关推荐

记一次Redis出问题及解决方案

Q1: redis服务关闭前确认数据还是在的,重启后发现一条数据都没了,key* 查也是空的 A1: 经仔细检查发现redis.conf配置文件配置的数据存储目录配置的是dir ./ 也就是相对目录,也就是说在哪个目录执行redis-server redis.config启动命令 redis数据就会存到哪个目录,同样就会加载哪个目录下的数据文件(dump.rdb),前后两次启动命令的位置不一样导致第二次启动没有加载到(dump.rdb)文件,从而导致查不出数据 Q2:springboot 集成r

u010013928的博客 3059

数据结构 数据类型

1.2 数据类型和抽象数据类型 1.数据类型: 是一个值的集合和定义在此集合上的一组操作的总称。 数据类型和数据结构的关系 数据类型就是已经实现了的数据结构 2、抽象数据类型: 抽象数据类型(ADT)指的是从求解问题的数学模型中抽象出来的数据逻辑结构和运算(抽象运算),而不考虑计算机的具体实现。 抽象数据类型 = 逻辑结构 + 抽象运算 例如,定义复数抽象数据类型Complex ADT Complex { 数据对象: D={ e1,e2 | ...

孙宇航的博客 970

SRAM:SRAM入门指南与工作原理

SRAM(Static Random Access Memory),即静态随机存取存储器,是一种能够读取和写入数据的内存(RAM)。它使用由晶体管组成的触发器来存储数据,只要有电源供应,数据就可以稳定地保存。与动态随机存取存储器(DRAM)不同,SRAM 不需要周期性地刷新来保持数据。

weixin_42896509的博客 1万+

数据结构基础知识点

声明:本内容主要是复习《数据结构(C语言)--严蔚敏等老师编写》的笔记 数据:对客观事物的符号描述,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素:数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。 数据项:一个数据元素有若干个数据项组成,且数据项是数据的不可分割的最小单位。 数据对象:性质相同的数据元素的集合,是数据的一个子集。  四者之间的关...

IT界幼稚生的博客 2709

模型优化系列——模型剪枝/量化概述

模型优化目的:通过减少模型大小,提高推理速度等使模型成功部署在各个硬件中并实时有效运作。

qq_61210574的博客 1293

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

WW、forever的博客 191

数据结构 第一章(绪论)

(1)算法时对特点问题求解方法和步骤的一种描述,它是指令的有限序列,其中每个指令表示一个或多个操作。(2)一个算法必须满足以下5个重要特性:①有穷性。一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。②确定性。对于每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,算法的执行者或阅读者都能明确其含义及如何执行。③可行性。算法中的所有操作都可以通过将已经实现的基本操作运算执行有限次来实现。④输入。

Zevalin的博客 2068

PCL 逐点插入法构建Delaunay三角网(C++详细过程版)

点云构建Delaunay三角网的逐点插入法基于PCL点云库的C++详细过程版实现

点云侠的博客 2992

数据结构——绪论

数据对象是具有相同性质的数据元素的集合,是数据的一个子集。1.3.2 什么是数据结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

MissedID_的博客 1133

OpenClaw入门必装Skills(附使用场景)

很多同学安装了OpenClaw后,但却不会使用,就相当于你只是拥有了一副强大的躯干,却没有给它装上能够灵活执行任务的“手脚”和负责思考决策的“大脑插件”——Skills。没有这些核心能力的支撑,OpenClaw只是一个“空壳”,无法真正应用到实际业务场景中,更谈不上提升效率或解决复杂问题。所以,安装只是第一步,要真正让OpenClaw“活”起来,为我们所用,就需要给OpenClaw安装各种Skills,这个过程就是养虾的过程。

十二测试录 3224

骑砍Ⅱ霸主MOD开发(16)-FaceKey&BannerKey

摘要:本文介绍了FaceKey人物模型和BannerKey旗帜模型的生成流程。FaceKey通过序列化参数生成人物模型,包括头部(脸部、嘴、睫毛、眼睛)、眉毛、头发、身体和躯干等组件,每个部分通过特定标签和骨骼绑定实现。BannerKey则通过解析参数生成旗帜模型,包括模型、贴图和颜色等元素。两种模型都采用参数化设计和XML配置文件实现模型生成与定制。

骑砍战团&霸主MOD开发 2286

数据结构绪论思维导图

数据结构绪论思维导图

Corleone1024的博客 296

linux v3h平台开发系列详解(GMSL摄像头篇):1.11 解串器MIPI 1.5G高速率特殊deskew配置

解串器max96712 deskew配置

xian18809311584的博客 1775

数据结构思维导图——绪论

数据结构思维导图——绪论

weixin_43795851的博客 261

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

关于数据结构绪论的思维导图

关于数据结构绪论的思维导图

iron2的博客 219

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

《数据结构》 绪论知识总结

doc123tor的专栏 629

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数据结构 第一章:绪论

数据结构 第一章:绪论 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的 K...

linguel的博客 320

数据结构 第一章 绪论 思维导图

数据结构 第一章 绪论 思维导图

qq_44692304的博客 312

数据结构思维导图 第一章绪论

数据结构思维导图 第一章 绪论

weixin_45903649的博客 190

数据结构绪论

最近开始复习数据结构,整理了数据结构绪论的脑图,欢迎大家多多批评指正 更多干货文章,欢迎大家扫描二维码关注公众号

477

数据结构第1章绪论相关练习题

第1章 绪论 一、选择题 1. 算法的计算量的大小称为计算的( B ) A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于(C) A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A...

#两个西柚 1万+

数据结构绪论思维导图1

qq_40245549的博客 375
下一篇: 函数的工作原理
Yangping_Peng
博客等级 码龄14年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值