当前位置:首页 > 教育培训 >

学校没有数据结构需要自学吗

来源:原点资讯(m.360kss.com)时间:2023-06-18 18:03:58作者:YD166手机阅读>>

对于程序员来说,数据结构真的很重要,但是对于单片机程序员来说,很多人可能都是非计算机科班出生,数据结构都是自学的。至少我自动化本科的课程是没有数据结构的课程的,如果说有的话,便是我已经还给老师了,哈哈哈。

队列,链表,类,结构体,联合体,二叉树等等都是嵌入式常用的数据结构。

在毕业后的工作岗位上,我也get到了一个非常好用的数据结构使用方法:联合体 结构体的方式,具体定义如下。

#define SIZE (28U)

typedef union

{

INT8U buf[SIZE];

struct

{

INT32U a[3];

INT16S b[3];

INT8U res[8];

INT16U cs;

}bits;

}MY_PARM;

这么定义的好处是,如果我想一次性赋值给所有变量,可以直接MY_PARM.buf,如果单独修改某一个参数,可以MY_PARM.bits. a[2],可以说是超级方便。大家说说这么定义还有什么好处?

另外,在单片机程序开发中经常使用的数据结构还有环形队列。这个网上资料也超多,这里不多说,索性这里学以致用,写一个使用联合体 结构体实现的环形队列。

#define EVENT_SIZE (12U)

typedef union

{

INT8U val8[EVENT_SIZE];

struct

{

INT8U type;

INT8U idxL;

INT8U idxH;

INT8U value;

INT8U time[8];

}bits;

}RECORD;

#define MaxBufferSize 64

typedef struct

{

RECORD record[MaxBufferSize];

INT8U Put;

INT8U Get;

}RECORD _BUFF;

RECORD _BUFF record_buff;

RECORD info[MAX_CHANNEL];

/**********************************************/

/*判断缓冲区是否为空*/

//参数:无

//返回值:空返回TRUE,非空返回FALSE

/**********************************************/

INT8U BufferEmpty( void )

{

RECORD _BUFF *buff;

buff = record_buff;

if( buff->Put==buff->Get )

{

return TRUE;

}

return FALSE;

}

/**********************************************/

/*判断缓冲区是否为满*/

//采用牺牲一个元素空间的方式

//参数:无

//返回值:满返回TRUE,未满则返回FALSE

/**********************************************/

INT8U BufferFull(void)

{

RECORD _BUFF *buff;

buff = record_buff;

if( ( buff->Put 1 )%MaxBufferSize==buff->Get )

{

return TRUE;

}

return FALSE;

}

/**********************************************/

/*从缓冲区中读信息函数*/

//参数:无

/* 从环形缓冲区中取元素 */

/* 有几个元素取几个元素 */

//返回值:无

/**********************************************/

void ReadBuffer(void)

{

RECORD _BUFF *buff;

buff = & record_buff;

if( FALSE==BufferEmpty( ) )

{

memcpy( &data,&buff->record[buff->Get], 12U );

buff->Get=( INT8U ) ( ( buff->Get 1 )%MaxBufferSize );//读指针后移

}

}

/**********************************************/

/*把ID号为i的信息写到缓存里面*/

//参数:ID号

/* 向环形缓冲区buff中放入一个元素*/

//返回值:无

/**********************************************/

void WriteBuffer(INT8U i)

{

RECORD _BUFF *buff;

RECORD *temp;

buff = & record_buff;

temp = & info[i];

memcpy( &buff->record[buff->Put], temp, 12U );//

buff->Put=( INT8U ) ( ( buff->Put 1 )%MaxBufferSize );

}

栏目热文

数据结构与算法考研怎么学(算法与数据结构考研什么专业)

数据结构与算法考研怎么学(算法与数据结构考研什么专业)

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 简介 学习编程,数据结构是你必须要掌握的基础知...

2023-06-18 18:46:27查看全文 >>

算法与数据结构网课容易通过吗(数据结构与算法超星网课答案)

算法与数据结构网课容易通过吗(数据结构与算法超星网课答案)

算法与数据结构到底难不难,好不好学?很多人有着这样的困惑,因为程序员面试特别喜欢问算法与数据结构题,身边很多朋友都临时抱...

2023-06-18 18:50:31查看全文 >>

数据结构一般考算法吗(数据结构算法题一般考什么)

数据结构一般考算法吗(数据结构算法题一般考什么)

如你是计算机科学与技术、网络工程、软件工程、信息安全、嵌入式开发等计算机专业,《数据结构》是必修课。很多人会觉得这门课程...

2023-06-18 18:00:56查看全文 >>

大二怎么学好数据结构和算法

大二怎么学好数据结构和算法

首先,当前选择学习大数据方向是不错的选择,未来随着大数据技术逐渐开始落地应用,大数据领域会释放出大量的人才需求。对于当前...

2023-06-18 18:20:24查看全文 >>

数据结构与算法谁的课好(数据结构与算法课程难吗)

数据结构与算法谁的课好(数据结构与算法课程难吗)

数据结构青岛大学——王卓老师的数据结构与算法基础浙江大学——陈越、何钦铭老师的数据结构课程清华大学——邓俊辉老师的数据结...

2023-06-18 18:25:13查看全文 >>

数据结构和算法难学吗(数据结构与算法课程难吗)

数据结构和算法难学吗(数据结构与算法课程难吗)

算法与数据结构到底难不难,好不好学?很多人有着这样的困惑,因为程序员面试特别喜欢问算法与数据结构题,身边很多朋友都临时抱...

2023-06-18 18:03:42查看全文 >>

自学大学数据结构要学多久(零基础自学数据结构用哪本书)

自学大学数据结构要学多久(零基础自学数据结构用哪本书)

三个月怎么把数据结构学到考研水平,三个月的话,其实正常人应该够了,如果你是已经大三,或者有一定编程水平,为什么这么说?因...

2023-06-18 18:37:48查看全文 >>

不学数据结构可以直接学算法吗(先学算法还是先学数据结构)

不学数据结构可以直接学算法吗(先学算法还是先学数据结构)

随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是一个相当有前景的专业领域。其中,算法工程师这一职位更是非常火爆,...

2023-06-18 18:27:42查看全文 >>

数据结构与算法研究生就业(数据分析与算法研究生就业)

数据结构与算法研究生就业(数据分析与算法研究生就业)

这几年,我想大家今年听到最频繁的当属:“内卷”和“躺平”了从这两个词开始在网络上流行的时候希老师就开始疑惑:明明应该是年...

2023-06-18 18:20:42查看全文 >>

学数据结构要掌握算法吗(数据结构和算法哪个先学)

学数据结构要掌握算法吗(数据结构和算法哪个先学)

作为计算机专业的一名“老兵”,笔者从事数据结构和算法的研究已经近20余年了,在学习的过程中,也会遇到一些问题,但在解决问...

2023-06-18 18:12:22查看全文 >>

文档排行