layout: post
title: 数据结构基本概念总结
subtitle:
date: 2019-9-9
author: 度朝腾
header-img: img/dragon.jpg
catalog: true
tags:
- c
#include<iostream>
using namespace std;
struct Teacher
{
char name[32];
char tile[32];
int age;
char addr[128];
};
int main()
{
struct Teacher t1;
struct Teacher tArray[30];
memset(&t1, 0, sizeof(t1));
strcpy(t1.name, "name");
strcpy(t1.addr, "addr");
strcpy(t1.tile, "addr");
t1.age = 1;
}
一、基本概念与术语比较容易错的
- 数据项(类型没有要求、最小单位)->数据元素(相同性质、基本单位)->数据对象(是数据的子集)->数据
- 数据类型(原子类型、结构类型、抽象数据类型)
- 抽象数据类型ADT:指一个数学模型及定义在该模型上的一组操作,抽象数据类型的定义仅仅取决于其一组逻辑特性,与其在计算机内部如何表示和实现无关,不论其内部结构如何变化,只要他的数学特性不变,都不影响其外部的使用。(更详细:在构造数据类型的基础上增加了对数据的操作,且类型的表示细节及操作的实现细节对外是不可见得。之所以说它是抽象的,是因为外部只知道它做什么,而不知道它如何做,更不知道数据的内部表示细节。这样,即使改变数据的表示和操作的实现,也不会影响程序的其他部分。抽象数据类型可达到更好的信息隐藏效果,因为它使程序不依赖于数据结构的具体实现方法,只要提供相同的操作,换用其他方法实现时,程序无需修改,这个特征对于系统的维护很有利。)
- 数据元素不是孤立存在的,之间存在某种关系。这种关系称之为结构,数据结构就是这些存在关系的数据元素的集合。如二元组定义(D,R),其中D代表数据对象,R代表D上数据元素之间关系的集合。
- 多型数据结构指数据元素的类型不确定。
- 数据的逻辑结构当然和数据元素本身的内容和形式无关。
二、数据结构三要素的难点
- 宗旨:一个算法的设计取决于所选定的逻辑结构,一个算法的实现依赖于所采用的存储结构。
- 逻辑结构比较爱考的几个点:
- 集合属于非线性结构,集合之中的数据元素没有对应关系。
- 有序表指关键字有序的线性表,是逻辑结构。顺序表、哈希表、单链表都属于既描述逻辑关系又描述了存储结构。
- 数据的逻辑结构以面向实际问题的角度出发,只用抽象表法方式,独立于存储结构。
- 存储结构就是为了把抽象的逻辑结构映射到计算机上,不能独立于逻辑结构存在。
- 逻辑结构并不会唯一决定存储结构,解决方法当然可以不一样啦!
- 存储结构比较爱考的几个点:
- 随机存取:主要在取,想取哪可以直接获得。
- 随机存储:主要在存,不要求逻辑相邻的元素在物理地址的映射也相邻。
- 顺序存取:主要在取,必须先访问前置元素。
- 顺序存储:主要在存,要求逻辑相邻的元素在物理地址的映射也相邻。
- 链接存储的特点是利用指针来表示数据元素之间的逻辑关系。
- 散列存储(哈希存储)无法反映数据元素之间的逻辑关系(集合)。
- 数据运算:定义针对逻辑结构,实现针对存储结构。
三、算法与算法评价
- 严奶奶钦定,算法优劣与所用计算机无关,但与算法描述的语言有关,实现语言级别越高,执行效率越低。
- 时间复杂度没有O( i )这种描述。
- 渐近时间复杂度就是时间复杂度的别称。
- 注意算法的五大基本特性和评判优良算法的四大特性是不同的。