一个已经工作的程序员重新开始学习代码的路程

大学时期我学的课程是C语言和PYTHON,毕业后靠着大学知识也还算够用。最近跳槽换了一家大厂做嵌入式,里面的代码是C/C++混编的,对于我这个从来没碰过C++的人,经常在代码里看到没看过的思路,只能从iostream开始了。

和同事混了一个腾讯视频的课程

顺便问一下各位想配个迷你副屏(桌子不够大),有推荐的吗

2022.7.2 今天做的是命名空间的用法,感觉不如结构体啊

#include<iostream>
#include<Windows.h>
#include<string>
/*

*/
//Shake
namespace China {
	float population = 14.1;
	std::string capital = "北京";
}
//Ash
namespace Japan {
	float population = 1.27;
	std::string capital = "东京";
}
using namespace China;
	int main(void) {
		std::cout << "首都:" <<capital<< std::endl;
		std::cout << "人口:"<<Japan::population<<"亿人" << std::endl;
		std::cout << "3.网站攻击记录" << std::endl;
		std::cout << "4.DNS攻击" << std::endl;
		std::cout << "5.服务器重启攻击" << std::endl;
		system("pause");
		return 0;
	}

*******************************************************************************************************************

2022.7.24

今天终于分清楚了数据结构的区别和具体作用 ,之前在工作中都是硬用,搬着前辈们的老代码做开发,啥也不想该吃吃该花花,这次好好整理了亿下,加入了我自己的理解。

在这里引用一篇很好的文章:

(7条消息) 数据结构(全)_heyuchang666的博客-CSDN博客_数据结构

大佬,收下我的膝盖

        目前我在嵌入式开发的应用中主要用到的数据结构有这几种:①数组②栈③队列④链表⑤树。浅谈一下这几个的应用场景

数组:

        最常用的最简单的消息结构,取一段连续的内存空间用来存储一组相同类型的数据,可通过下标直接访问,用起来轻松愉快,一般是把对象1的各种信息按顺序存在数组1中,对象2存在数组2中。再把对象12345...做一个总的数组。这样就可以通过访问二维数组x[对象序号][信息序号]来获取内容。比如我获取了a,b,c的值,要在屏幕上显示出来,这时对于每个对象他们有着显示位置,精度,字体信息需要读取,对于获取的信息是那个对象的也需要读取,依此的二维数组用起来很方便。

栈:

        栈也是一种数据呈线性排列的数据结构,特点先进后出、后进先出。就想往羽毛球桶里放羽毛球,最先放的那个只能最后拿出来。这个用在程序被中断时,把当前运行到一半的程序存在栈里,等中断结束后再从栈里挖出之前运行到一半的程序继续运行。

队列:

        队列也是一种非常基础的数据结构,其特点是先入先出。就像一条单行道,不能后退,和排队进门一样,先去排队的人排在前面,且可以先进场。队列的数据就算要删除也必须是从先进队列的开始删除。据说队列是实现多任务的重要机制,我做的产品有消息告警,这里会用到队列。淘宝中的准点抢购也会用到,准点抢购是短时间内大量用户访问,队列会按照时间给这些个用户排队,按排队的顺序依次处理这些个用户。用队列可以有效的防止系统因为流量过大导致挂掉,把本来并行的东西变成单通道,按序依次处理。

链表:

 ps:节点和节点间用指针连接。

一种省内存的存储方式,可以避免内存碎片过多。链表是一种物理存储单元上非连续,非顺序的存储结构。链表有一系列节点组成,所谓节点就是指链表中的每一个元素,每个节点包含两个数据,一个是存储元素的数据域(值),另一个是存储下一个节点地址的指针域。

链表更适合用来储存不定长的数据,可以在每次需要增加新数据时才为之申请内存,不会造成浪费,也不会因一次申请不足而使数据的数量受到限制。

链表与数组最大的不同就在于删除、插入的性能优势,由于链表是非连续的内存,所以不用像数组一样在插入、删除操作的时候需要进行大面积的成员位移,比如在a、b节点之间插入一个新节点c,链表只需要:

  1. a断开指向b的指针,将指针指向c
  2. c节点将指针指向b

链表可以用在撤销功能上,对比数组实现撤销需要大范围储存单元移动,链表只要变一下指针就好了。

树:

树用在查询方面好像比较多,因为普通的数组查询数据需要从第0个开始遍历,树的话查起来比较快。

 

堆(Heap)
堆比较特殊,是一种图的树形结构。被用于实现“优先队列”(priority queues),优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺 序取出。在堆的树形结构中,各个顶点被称为“结点”(node),数据就存储在这些结点中。
只要满足下面两个特点的树形结构就是堆:

  • 堆是一个完全二叉树(所谓完全二叉树就是除了最后一层其他层的节点个数都是满的)。
  • 堆中每一个节点的值都必须大于等于或者小于其子树中每一个节点的值。

下面我们看一下堆的结构:
 



上面其实叫大顶堆,如果每一个节点小于子树中每个节点的值,那就叫小顶堆。
图(Graph)
图是相对复杂的一种数据结构,由顶点和连接每对顶点的边所构成的图形就是图。
我们先来看图:
 

上图中的圆圈叫作“顶点”(Vertex,也叫“结点”),连接顶点的线叫作“边”(Edge)。也就是说,由顶点和连接每对顶点的边所构成的图形就是图。 图按照顶点指向的方向可分为无向图和有向图,像我上面的就叫无向图。 图在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构。常见的图遍历算法就是广度优先算法和深度优先算法。
总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值