C语言编程数据结构基础详解小白篇

目录
  • 数据结构的基本信息
  • 数据结构
  • 逻辑结构
    • 1,集合结构
    • 2,线性结构
    • 3,树结构
    • 4,图结构或网结构
  • 存储结构
    • 顺序储存结构
    • 链式储存结构
  • 抽象数据类型

介绍

数据结构的基本信息

数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。如:字符串,实数整数。。。。
数据元素:是数据的基本单位,在计算机中通常被作为一个整体进行考虑与处理。如组成通讯录的每一个人的信息,数据元素可以完整的描述一个对象。
数据项:是组成数据元素的,具有独立意义的,不可分割的最小单位(也就是说,数据元素由诺干个数据项组成)。如,通讯录中每一个学生都是数据元素,而,描述学生的姓名,性别,年龄等,都是学生的数据项。
数据对象:性质相同的数据元素的集合,是数据的一个子集。只要是一个集合内的数据元素的性质一样,该集合都可以是一个数据对象。如,整数集和,是整数的数据对象。

数据结构

是什么

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合

或者说,数据结构是带“一定结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系

数据结构
包括逻辑结构和存储结构

逻辑结构

逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的(是认为想象出来的的一种数据模型)

数据的逻辑结构有两大要素:1,数据元素;2,关系
数据元素是指可被计算机看为一个整体进行处理与考虑。
而关系是指数据元素之间存在的逻辑关系

通常有以下4类基本结构

1,集合结构

数据元素除了同属同一集合之外,再无其他关系(每个数据元素具有同一性质)

例如:集合结构应用时,可以每个班为一个集合,每个班中的学生则是数据元素,各个班的学生都是人,但每个学生的数据项各不相同。而各个班相比则更是两个集合。

2,线性结构

数据元素之间只存在一对一的关系。

例如:统计学生入学信息是按照其入学时间进行排列储存。
要想找到某个学生的信息,只能根据相互之间的时间关系,去遍历,去二分,去查找。

3,树结构

数据元素之间存在一对多的关系。

例如:古代封建制度里的皇帝管理六部,六部分管各个衙门机构。。。。

4,图结构或网结构

数据元素之间处在多对多的关系。

要想找到某个元素可以有多个路径或方法可以达到目的。

逻辑结构又分为线性结构和非线性结构,以上4种基本结构都属于非线性结构
看以下图表,增强记忆,理清思路。

存储结构

数据对象在计算机中的存储为数据的储存结构,也是物理结构,要映射到计算机中的物理内存中。将数据对象存储到计算机中要储存各数据元素,又要储存元素之间的逻辑关系。
在计算机中有两种储存方式:顺序储存和链式储存。

顺序储存结构

借助元素在存储器的相对位置来表示数据元素之间的逻辑关系。
即相当于,在内存中依次按地址储存。
例如:数组

链式储存结构

所有元素依次存放在一片连续的存储空间中,而链式存储结构无需占用一整块存储空间,但要利用指针来指明数据元素之间的关系。例如:链表。

抽象数据类型

根据实际问题,由用户定义的,解决应用问题的数据模型,以及在这个模型是的一系列操作。
例如:用结构体创建的结构体类型。
如有错误,烦请大佬指正
我目前水平不够,暂时未对抽象数据类型有过多认知,以后会补上。

以上就是数据结构基础详解小白篇的详细内容,更多关于C语言数据结构基础的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用C语言构建基本的二叉树数据结构

    二叉树结构常用的一些初始化代码 #include #include typedef struct Node{ int data; Node *leftchild; Node *rightchild; }Node; /* 初始化一棵二叉树排序树. */ void InitBinaryTree(Node**root,int elem) { *root=(Node*)malloc(sizeof(Node)); if(!(*root)) { printf("Memory allocation for r

  • C语言数据结构 栈的基础操作

    C语言数据结构 栈的基础操作 实现了栈的基本操作,包括入栈出栈,以及书上没有写的销毁栈等操作,并对代码进行了详细的注释 MyStack.h /* * Include.h * * Created on: 2016.11.23 * Author: Jack Cui */ #ifndef MYSTACK_H_ #define MYSTACK_H_ #include <stdlib.h> #include <stdio.h> #include <malloc.h> /*栈(St

  • C语言数据结构 快速排序实例详解

    C语言数据结构 快速排序实例详解 一.快速排序简介 快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序. 二.代码实现 #include <stdio.h> /* 将两个数据交换 */ void swap(int* Ina , int* Inb) { int temp = *Ina; *Ina = *Inb; *Inb = temp; } /* 进行一趟的快速排序,把一个序列分为两个部分 */ int getPart

  • C语言创建和操作单链表数据结构的实例教程

    1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小,难于统一.我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费. 我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要.链表就是我们需要的动态数组.它是在程序的执行过程中根据需要有数据存储就向系统要求

  • C语言编程数据结构基础详解小白篇

    目录 数据结构的基本信息 数据结构 逻辑结构 1,集合结构 2,线性结构 3,树结构 4,图结构或网结构 存储结构 顺序储存结构 链式储存结构 抽象数据类型 介绍 数据结构的基本信息 数据:是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称.如:字符串,实数整数.... 数据元素:是数据的基本单位,在计算机中通常被作为一个整体进行考虑与处理.如组成通讯录的每一个人的信息,数据元素可以完整的描述一个对象. 数据项:是组成数据元素的,具有独立意义的,不可分割的最小单位(也就是

  • MySQL学习之三大范式详解小白篇

    目录 1.范式基础 1.1范式的概念 2.三大范式 2.1三大范式概念 2.2三大范式举例 1.进行第一范式的改造 2.进行第二范式的改造 3.进行第三范式的改造 1.范式基础 1.1范式的概念 设计数据库的时候需要遵从的一些规范,目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式). 当然正常情况下我们满足前三个范式就可以设计一个比较规范的数据库 要遵循后边的范式,就必须先遵循前面

  • IDEA社区版下载安装流程详解(小白篇)

    本人一直使用的是Eclipse作为开发工具的,不过现在IDEA非常的受推崇,所以决定上手试一试.网上有很多旗舰版的文章,我没有仔细看,我这次是决定使用社区版的IDEA,虽然功能会少一些,作为练手用完全够用了. IDEA官网地址:https://www.jetbrains.com/idea/download/ 下载社区版后,点击安装,就进行傻瓜式的安装了. 以上两个步骤中有一个点击next的时候时间会稍稍有点久,耐心等待一下就好了. 点击安装,IDEA社区版就安装完成了,安装好之后打开IDEA工具

  • MySQL学习之数据库操作DML详解小白篇

    目录 1.插入语句 1.1插入一行 1.2插入多行 1.3插入查询语句 2.修改语句 2.1修改单表记录 2.2修改多表记录 3.删除语句 3.1方式1使用delete删除 3.2方式2使用truncate删除 3.3使用truncate和delete删除的区别 1.插入语句 1.1插入一行 有两种: 1.以小括号的形式 这里注意:如果表名后边不加小括号对应内容,那么默认就是添加所有列 2.以set形式 insert into + 表名 set 表中的某一个字段=要插入的值,表中的某一个字段=要

  • MySQL学习之数据库表五大约束详解小白篇

    目录 1.约束概念和分类 2.五大约束的添加和删除 2.1添加约束的六种方法 2.2三种删除约束的方式 2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2) 2.4对于创建约束的总结 2.5对于主键和唯一的区别 3.自增长列 3.1概念 3.2在创建表的时候添加主键约束,并且完成主键自增长的例子 3.3自增长的添加和删除 3.4设置自增长步长 1.约束概念和分类 1.1约束的概念: 对表中的数据进行限定,保证数据的正确性,有效性,完整性 1.2约束分类 1.主键约束(primary k

  • C++LeetCode数据结构基础详解

    目录 一.只出现一次的数字 二.多数元素 三.三数之和 总结 一.只出现一次的数字 遍历一遍数组利用异或的特性来实现(相同为0,相异为1 ) 例如[4,1,2,1,2] 4和1异或为5 5和2异或为7 7和1异或为6 6和2异或为4 这样就能找出唯一的数字了 public int singleNumber(int[] nums) { int res=0; for(int i=0;i<nums.length;i++){ res=res^nums[i]; } return res; } 二.多数元素

  • C 语言基础----详解C中的运算符

    C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如果两数中有一个为小数,结果则为小数. 取余运算中注意: 该运算只适合用两个整数进行取余运算 运算后的符号取决于被模数的符号,如(-10)%3 = -1;而10%(-3) = 1. 注:C语言中没有乘方这个运算符,也不能用×,÷等算术符号. 赋值运算符 下表列出了 C 语

  • C语言柔性数组实例详解

    本文实例分析了C语言柔性数组的概念及用法,对于进一步学习C程序设计有一定的借鉴价值.分享给大家供大家参考.具体如下: 一般来说,结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组.但结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存.包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小.柔性数组到底如何使用? 不完整类型 C和C++对于不完

  • c++ 智能指针基础详解

    简介 在现代 C++ 编程中,标准库包含了智能指针(Smart pointers). 智能指针用来确保程序不会出现内存和资源的泄漏,并且是"异常安全"(exception-safe)的. 智能指针的使用 智能指针定义在头文件 memory 里的命名空间 std 中.它对于资源获取即初始化(RAII, Resource Acquisition Is Initialization) 编程理念至关重要.该理念的目的是保证对象初始化的时候也是资源获取的时候,从而使对象的所有资源在单行代码中创建

  • Ajax基础详解教程(一)

    什么是Ajax? 在研究ajax之前首先让我们先来讨论一个问题 --什么是Web 2.0 .听到 Web 2.0 这个词的时候,应该首先问一问 "Web 1.0 是什么?" 虽然很少听人提到 Web 1.0,实际上它指的就是具有完全不同的请求和响应模型的传统 Web.比如,到 hdu.edu.cn 网站上点击一个按钮.就会对服务器发送一个请求,然后响应再返回到浏览器.该请求不仅仅是新内容和项目列表,而是另一个完整的 HTML 页面.因此当 Web 浏览器用新的 HTML 页面重绘时,可

随机推荐