数据结构的学习,主要是练习代码
目录
一、概念
1.概念
- 程序 == 数据结构 + 算法
- 数据结构:程序操作数据对象的结构
- 算法:程序操作数据对象的方法
3.优点
- 合适的数据结构可以极大提升程序运行效率(时间)和内存使用(空间)。
- 帮助程序员更抽象地思考问题,聚焦于逻辑而非细节。
- 数据结构是学习算法、操作系统、数据库、编译原理等高级课程的基础。
2.程序的效率的衡量指标
- 时间复杂度(函数):数据量增长与程序运行时间增长呈现的比例函数关系
- o(c)、o(logn)、o(n)、o(nlogn)、o(n^2)、o(n^3)......o(2^n)
- 空间复杂度(函数):数据量增长与程序空间增长呈现的比例函数关系
3.数据结构
1).逻辑结构
- 线性结构:一对一关系
- 树形结构:一对多关系
- 图形结构:多对多关系
2).存储结构
- 顺序存储
- 访问元素方便
- 插入、删除效率低
- 无法利用小空间
- 链式存储:
- 插入、删除效率高
- 可以利用小空间
- 访问元素不方便
- 增加额外空间开销
- 索引存储
- 散列存储
4.重点
- 顺序表
- 链式表
- 顺序栈
- 链式栈
- 顺序队列
- 链式队列
- 二叉树(完全二叉树,满二叉树)
- 哈希表
- 常见的排序和查找算法
二、顺序表
-
核心定义
-
物理结构:内存地址连续
-
逻辑结构:线性排列
-
访问方式:通过下标/索引直接访问
-
-
本质等同于数组,通过申请堆区空间存储数据,通过首地址完成对所有控件访问
-
头文件
seqlish.h
cs
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
typedef int DataType;
extern DataType *CreateSeqlist(int len);
extern void DestorySeqlist(DataType **pparray);
#endif
- 代码
seqlish.c
cs
#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
DataType *CreateSeqlist(int len)
{
DataType *pret = NULL;
pret = malloc(len * sizeof(DataType));
if (NULL == pret)
{
perror("fail to malloc");
return NULL;
}
return pret;
}
void DestorySeqlist(DataType **pparray)
{
free(*pparray);
*pparray = NULL;
return;
}