C++数据结构笔记(未完成,持续更新)

阅读完成大概需要10分钟 | 2019-03-29 | 原创 | 有编程基础者适宜

个人博客 | B站空间

1. 我的理解

  • 数据结构?什么是数据结构?

    • 就是数据(比如学生成绩等这些具有实际意义的东西)通过某种关系关联起来, 方便我们使用计算机统计和其他操作, 这样就是数据结构.

    • 在我看来数据结构就是个工具, 基于基本类型, 而形成的, 它的重点只是研究操作(数据元素)对象的关系, 根据不同问题对于数据操作的的特点(比如经常需要和插入删除元素), 使用不同的数据结构, 可以更加高效的解决问题.

  • 算法就是解决问题的具体方法.

数据结构 + 算法 = 程序.


2. 算法:

数据结构只是静态的描述数据元素之间的关系, 高效的程序需要在 数据结构的基础上数据和选择算法.

  • 算法是为了解决实际问题而设计的.
  • 数据结构是算法需要处理的问题载体.
  • 数据结构于算法相辅相成.

2.1. *算法的特性

输入:有0或多个输入.
输出:至少有一个输出(有1或以上的输出).
有穷性: 有始有终.
确定性: 每一步都有确定的含有, 不会出现二义性.
可行性: 算法的每一步都是可行的.

2.2. 统计算法的效率: 算法效率的度量

因为解决问题算法有多种, 货比三家, 那么我们需要 一把尺子来衡量算法的好坏, 来帮助我们判断优劣算法.

2.2.1. 时间复杂度(运行消耗时间的度量)

2.2.1.1. *事后统计法

记录程序运所消耗的时间, 作为参照物.

缺点: 这样有很多不确定性, 严重依赖于计算机硬件以及运行环境.

了解即可

实现方法: 获取在算法执行前获取时间戳并且赋值, 在算法完成时再获取并且减去执行前的时间戳.

--Lua代码
time = os.clock()
--代码
print(os.clock() - time)

2.2.1.2. 事前分析估算

假设每一指令在计算机上运行速度固定, 通过计数算法中代码执行步数的多少, 来衡量算法效率(简单来说: 数执行了多少行).

判断规则:

  • 只关注最高次项: 只关系操作数量的最高次项, 其他次项的常数忽略(因为大部分情况是人工数的, 偷懒而已啦).
  • 最坏的时间复杂度: 我们分析的算法复杂度往往都是最坏的时间复杂度.
  • 常数项记为1.

大O表示法 :
O(执行行数)

O(5)==O(1),以后O(常数)都写成O(1)
O(N4+N3+N)==O(N4)

比如:

void sum(int a,int b)
{
   int s;  //1
   s = a + b;  //2
   std::cout<< s <<std::endl;  //3
}

这个就是O(3) ==(因为常数记为1)== O(1)
注意: O(n)!=O(1)

又比如:

void fun(int n)
{
    int s = 1;
    for( ; s < n ; )
      s * = 2;
}

要想结束循环: 2x=N; 即 x=log2N, 记为O(logN)
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(n!)<O(xx)
是不是觉得很复杂? 其实只要数, 执行了多少行即可.

2.2.2. 空间复杂度(占用存储空间大小的量度)

使用S(f(n))表示, 有空再更新, 敬请期待.


3. 数据结构

如果说 数组, 指针 等这些 基本的数据类型 是花瓶材料(粘土), 那么数据结构出现的那些线性表, 栈等 那些, 就是 就是各种各样的花瓶, 不同的 使用不同的容器, 在效率来说也许更加高效.

基本功能:删除元素, 查找元素, 添加(插入)元素, 遍历全表.
它们都是类型相同的数据的集合.
元素有限.
想不出来了2333.

4.1. 线性结构

线性表包括: 数组(顺序表), 链表, 队列, 等.

4.1.1 线性表

数学定义: 具有相同数据类型的 N (>=0) 个数据元素的有限序列(连续的).

顺序表(其实就是数组)

  1. 地址连续, 直接定义数组使用的栈空间, 使用new开辟空间使用堆空间, 这个主要用开辟堆空间, 可以用参数同态分配数组长度.
  2. 原则上长度无法增减, 需要重新开辟新空间, 再拷贝原来的的数据,一般都实际大小都要大于开辟的空间.

简单实现(原创):

template<class T>
class Arr
{
  T* data;//指针
  unsigned int len;//长度
public:
Arr(unsigned int s)
{
  len=s;
  data=new T[s];
};// 构造
~Arr()
{
  delete[] data;//释放内存
}//构析
  T &operator[](int i)
{
  if(i<0||i>size)
    exit(EXIT_FAILURE);
  return data[i];
}//运算符重载 [i]
};

使用

Arr<type> data(len);
data[0]=(type)data
//---// 
Arr<int> int_data(10);
int_data[0]=100;
std::cout<<int_data[0]<<std::endl;

基于vector实现:

本家:

#include<vector>

初始化:

vector<type> p;
vector<type> p(int len);//设置初始大小.
vector<type> p(int len, type data)//设置大小, 并且设置每个的内容都为data.

//在这里导入参数vector<type> s, vector<type>是数据类型
vector<type> p(vector<type> s);//初始化一个和s内容相同的向量.
//假设x和y是向量t的两个元素指针,并且x<y.
vector<type> p(vector<type> *x,vector<type> *y);//初始化一个向量, 内容范围是t向量的x指针到y指针位置.

常用的API:

vector<type> s;


s.size();//获取元素个数
s.empty();//是否为空
s.clear();//清空所有的

vector<type> p;
p=s;//拷贝s的内容到p中.不是指针的操作.已经重载运算符.

==、!=、>、>=、<、<= 也适用. 返回值真1,假0.(某种程度上来说也是bool)

4.2. 非线性表

非线性结构: , 等.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343