VS基础使用,算法的评价,数据结构基础概念,顺序表

一、vs 基础使用

使用“解决方法” 来管理所有的工程。

二、算法的评价

1、时间复杂度

时间复杂度是算法的与问题规模大小的一个函数。 从算法中抽取一个基本操作,以基本操作执行的次数来衡量算法的效率

1、O(1)

没有循环,或者循环的次数与问题的规模没有关系 -- 循环是的次数是一个常数

2、O(n)

算法肯定是有循环或者递归, 而且这种循环或递归执行的次数与问题规模相等 (控制循环或者递归的变量是以+1,或者 -1的方式趋于退出条件发生的)。

3、 O(n^2)

两个O(n)相乘。 循环嵌套

4、O(logn)

算法肯定是有循环或者递归, 而且这种循环或递归执行的次数与问题规模有关 系,控制循环或递归的变量是以*2或者/2的方式趋于结束的。 log2(n) 时间复杂度表示的规则: 1. 取最高指数项 n^2 + n 2. 去掉系数 for(int i = 0; i < n/2; ++i) 3. 去掉常数

2、空间复杂度

算法执行过程中所需要的额外的(除了存储计算的数据本身)存储空间与问题规 模n的函数关系。 计算方法: 算法实现过程中有没有使用malloc或者new 申请与问题规模n相关的空间 算法有没有使用递归,并且递归的次数与问题规模n相关 一个函数开辟的堆 栈空间比较大

三、数据结构的基础概念

什么是数据结构: 相互之间存在一种或多种特定关系的数据元素的集合。 关系: 集合 线性关系 树形关系 图形关系   要学习的数据结构: 数据之间的存储关系如何用C语言表示 针对于一个结构中存储的数据有相对应的操作方法。

四、顺序表

线性关系: 顺序结构 顺序在逻辑上是连续的,在物理存储上也是连续的 链式结构 在逻辑上是连续的,在物理存储上是不连续的

1、顺序表的结构

VS基础使用,算法的评价,数据结构基础概念,顺序表   顺序表结构中需要的成员: 1、用于存储数据元素的空间位置 2、当前已存储的数据元素的个数 -- 记录存储数据的位置 3、空间能够存储的元素的总量 -- 扩容 4、顺序表存储数据元素时,必须从空间的起始位置开始连续存储

2、顺序表的C语言结构设计

 1 typedef int ElemType;
 2 typedef struct SqList
 3 {
 4  ElemType *data; // 指向用于存储ElemType类型的堆区空间的指针
 5  int length; // 长度: 以存储的属于元素的个数
 6  int size; // 空间的大小,记录的是能够存储的元素个数
 7 }SqList;
 8 // 初始化
 9 void InitSqList(SqList *sq_list, int init_size);
10 // 销毁
11 void DestroySqList(SqList *sq_list);
12 // 插入
13  /*
14  1、头插法
15  2、尾插法
16  3、按位置插入
17  */
18  bool InsertSqListHead(SqList *sq_list, ElemType value);
19  bool InsertSqListRear(SqList *sq_list, ElemType value);
20  bool InsertSqListPos(SqList *sq_list, ElemType value, int
21 pos);
22 // 删除
23  /*
24  1、头删法
25  2、尾删法
26  3、按位置删
27  4、按值删除
28  */
29  bool DeleteSqListHead(SqList *sq_list);
30  bool DeleteSqListRear(SqList *sq_list);
31  bool DeleteSqListPos(SqList *sq_list, int pos);
32  bool DeleteSqListValue(SqList *sq_list, ElemType value);
33 // 查找 : 返回位置(下标):取值范围 0 -- length-1
34  int FindSqList(SqList *sq_list, ElemType value, bool
35 (*Compare)(ElemType, ElemType) fun);
36 // 判空
37  bool Empty(SqList *sq_list);
38 // 判满
39  bool Full(SqList *sq_list);

3、方法实现 

1 void InitSqList(SqList *sq_list, int init_size) 
2 {
3  if (sq_list == nullptr) exit(0);
4 init_size = init_size > 0 ? init_size : DEFAULTSIZE;
5 sq_list->data = (ElemType *)malloc(init_size * 6 sizeof(ElemType)); 7 if (sq_list->data == nullptr) exit(0);
8 sq_list->length = 0; 9 sq_list->size = init_size;
}

 

1、vs 基础使用 使用“解决方法” 来管理所有的工程。 2、算法的评价 1、时间复杂度 时间复杂度是算法的与问题规模大小的一个函数。 从算法中抽取一个基本操作,以基本操作执行的次数来衡量算法的效率 1、O(1) 没有循环,或者循环的次数与问题的规模没有关系 -- 循环是的次数是一个常数 2、O(n) 算法肯定是有循环或者递归, 而且这种循环或递归执行的次数与问题规模相等 (控制循环或者递归的变量是以+1,或者 -1的方式趋于退出条件发生的)。 3、 O(n^2) 两个O(n)相乘。 循环嵌套 4、O(logn)算法肯定是有循环或者递归, 而且这种循环或递归执行的次数与问题规模有关 系,控制循环或递归的变量是以*2或者/2的方式趋于结束的。 log2(n) 时间复杂度表示的规则: 1. 取最高指数项 n^2 + n 2. 去掉系数 for(int i = 0; i < n/2; ++i) 3. 去掉常数 2、空间复杂度 算法执行过程中所需要的额外的(除了存储计算的数据本身)存储空间与问题规 模n的函数关系。 计算方法: 算法实现过程中有没有使用malloc或者new 申请与问题规模n相关的空间 算法有没有使用递归,并且递归的次数与问题规模n相关一个函数开辟的堆 栈空间比较大 3、数据结构的基础概念 什么是数据结构: 相互之间存在一种或多种特定关系的数据元素的集合。 关系: 集合 线性关系 树形关系 图形关系 要学习的数据结构: 数据之间的存储关系如何用C语言表示 针对于一个结构中存储的数据有相对应的操作方法。 4、顺序表 线性关系: 顺序结构顺序在逻辑上是连续的,在物理存储上也是连续的 链式结构在逻辑上是连续的,在物理存储上是不连续的 1、顺序表的结构顺序表结构中需要的成员: 1、用于存储数据元素的空间位置 2、当前已存储的数据元素的个数 -- 记录存储数据的位置 3、空间能够存储的元素的总量 -- 扩容 4、顺序表存储数据元素时,必须从空间的起始位置开始连续存储 2、顺序表的C语言结构设计 typedefintElemType; typedefstructSqList { ElemType*data; // 指向用于存储ElemType类型的堆区空间的指针 intlength; // 长度: 以存储的属于元素的个数 intsize; // 空间的大小,记录的是能够存储的元素个数 }SqList; // 初始化 voidInitSqList(SqList*sq_list, int init_size); // 销毁 voidDestroySqList(SqList*sq_list); // 插入 /* 1、头插法 2、尾插法 3、按位置插入 */ boolInsertSqListHead(SqList*sq_list, ElemType value); boolInsertSqListRear(SqList*sq_list, ElemType value); boolInsertSqListPos(SqList*sq_list, ElemType value, int pos); // 删除 /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 233、方法实现 1、头删法 2、尾删法 3、按位置删 4、按值删除 */ boolDeleteSqListHead(SqList*sq_list); boolDeleteSqListRear(SqList*sq_list); boolDeleteSqListPos(SqList*sq_list, int pos); boolDeleteSqListValue(SqList*sq_list, ElemType value); // 查找 : 返回位置(下标):取值范围 0 -- length-1 intFindSqList(SqList*sq_list, ElemType value, bool (*Compare)(ElemType, ElemType) fun); // 判空 boolEmpty(SqList*sq_list); // 判满 boolFull(SqList*sq_list); 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 voidInitSqList(SqList*sq_list, int init_size) { if (sq_list == nullptr) exit(0); init_size = init_size > 0 ? init_size : DEFAULTSIZE; sq_list->data = (ElemType *)malloc(init_size * sizeof(ElemType)); if (sq_list->data == nullptr) exit(0); sq_list->length = 0; sq_list->size = init_size; }

 

上一篇:如何将QQ音乐SQ品质FLAC格式转换成MP3音乐


下一篇:2021-03-28