文章目录
- 数据结构基本概念
- 算法和算法评价
- 线性表
一、数据结构基本概念
数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
数据元素:数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。
数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。例如,整数数据对象是集合N={0,±1,±2,…}。
数据类型:数据类型是一个值的集合和定义在此集合上的一组操作的总称。
1)原子类型。其值不可再分的数据类型。
2)结构类型。其值可以再分解为若干成分(分量)的数据类型。
3)抽象数据类型。抽象数据组织及与之相关的操作。数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种数据元素相互之间的关系称为结构。数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
数据结构的三要素: 数据逻辑结构、数据的存储结构、数据的算法
数据的存储结构包括:顺序存储、链式存储、索引存储、散列存储(哈希存储)。
二、算法和算法评价
算法:对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列5个重要特性:
1)有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
2)确定性。算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
3)可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
4)输入。一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
5)输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
通常,设计一个“好”的算法应考虑达到以下目标:
1)正确性。算法应能够正确地解决求解问题。
2)可读性。算法应具有良好的可读性,以帮助人们理解。
3)健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
4)效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。
算法效率的度量:
时间复杂度
空间复杂度
三、线性表
3.1线性表基本操作
InitList(&L):初始化表。构造一个空的线性表。
Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。
LocateElem(L,e):按值査找操作。在表L中查找具有给定关键字值的元素。
GetElem(L,i);按位查找操作。获取表L中第i个位置的元素的值。
ListInsert (&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
ListDelete(&L,i,se):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。
Empty(L):判空操作。若L为空表,则返回true,否则返回false。
DestroyList (L);销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
3.2顺序表
图示结构:
静态分配:
#define MaxSize 50 //定义线性表的最大长度
typedef struct{
Elemtype data[MaxSize];//顺序表的元素
int length; //顺序表的当前长度
}SqList; //顺序表的类型定义
动态分配:
#define InitSize 100//表长度的初始定义
typedef struct{
ElemType*data;//指示动态分配数组的指针
int MaxSize, length;//数组的最大容量和当前个数
}SqList; //动态分配数组顺序的类型定义
//初始动态分配语句(C语言)
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
3.3单链表(带头结点)
定义
typedef struct LNode{
ElemType data;//数据域
struct LNode *next;//指针域
}LNode,*LinkList;
图示
3.4双链表(带头结点)
定义
typedef strDNode{
ElemType data;//数据域
struct LNode *prior,*next;//前驱和后驱指针域
}DNode,*DLinkList;
图示
3.5循环单链表(带头结点)
3.6循环双链表(带头结点)
3.7静态链表
定义
#define MaxSize 50 //静态链表的最大长度
typedef struct{ //静态链表结构类型的定义
ElemType data; //存储数据元素
int next; //下一个元素的数组下标
}SLinkList[MaxSize];
以next==-1作为其结束的标志。
图示
对于不带头结点的链表判空条件为L==NULL,结构图示和带头结点的类似。
提示:本文基于王道考研2022的书籍,仅供参考,具体请购买正版书