1.C语言数据结构的顺序表,链表,栈,队列相关结构类型
1)顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,顺序存储,用一组连续的存储单元来表示
2)链表
概念
- 指针指向下一个结点(后继)指针,就叫做后继指针next---->单链表
- 指向下一个结点,另一个指针上一个结点(前驱),指向前驱指针称为prev,既有前驱指针又有后继指针的结构--->双链表
-
用单链表实现逆序
public static void reverseList(Node head) {
//如果当前链表为空,或者只有一个节点,无需反转,直接返回
if(head.next == null || head.next.next == null) {
return ;
}
//定义一个辅助的指针(变量),帮助我们遍历原来的链表
Node cur = head.next;
Node next = null;// 指向当前节点[cur]的下一个节点
Node reverseHead = new Node(0);
//遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端
while(cur != null) {
next = cur.next;//先暂时保存当前节点的下一个节点,因为后面需要使用
cur.next = reverseHead.next;//将cur的下一个节点指向新的链表的最前端
reverseHead.next = cur; //将cur 连接到新的链表上
cur = next;//让cur后移
}
//将head.next 指向 reverseHead.next , 实现单链表的反转
head.next = reverseHead.next;
}
3)栈
概念
栈是只允许在一端进行插入或删除的线性表,先进后出,
4)队列
概念
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。
2.熟悉掌握STM32开发,懂得GPIO,IIC,UART,SPI,定时器,中断驱动开发、
IIC
1)概念
一根SCL,一根SDA,两根线,串行,同步,半双工通信(解决片内的通信)
2)IIC通信时序
设备地址:0x8a ox55
1000 1010 cpu--》外设(写设备)
高位先出,低送高取 0101 0101
1.SCL一直是高电平低电平,直到结束输出高电平
2,SDA先发送一个起始位型号(一个高电平,1个低电平);然后发送设备地址0x8a;然后发送一个ack检测;发送数据位0x55;发送一个nack;发送停止信号(一个低电平,一个高电平),然后拉高,持续高电平。
UART
1)概念
异步、串行、全双工,通信接口,一根数据线,一根
TX:发送引脚
RX:接收引脚
2)UART通信协议
低位先出
起始位+ 数据位 + 校验位 + 停止位
起始位:1位,逻辑’0’
数据位:5~8位,可以在MCU中设置
校验位:0~1位, 无校验/奇校验/偶校验
奇校验:在数据位中有奇数个逻辑‘1’时,该位为0;否则为1
偶校验:在数据位中有偶数个逻辑‘1’时,该位为0;否则为1
停止位:0.5~2位,(传输每个都会占用固定时长),逻辑‘1’
数据传输顺序:先传送数据的低位
通信速度(波特率baud):在单片机应用,常用通信速度有2400、4800、9600、19200、115200 bit/s
SPI
1)概念
串行、同步、全双工高速总线 ,两根数据线MISO(主设备输入,从设备输出)和MOSI(主设备输出,从设备输入),1根片选线CS,1根时钟线SCLK
2)4种模式
4种模式决定以什么样的方式读数据
for (i = START; i < END ; i++) {
pid = fork();
//开200个进程
if (-1 == pid) {
perror("pid()");
return -1;
}
if (0 == pid) {
//子进程
//里面进行筛选
if (isprime (i)){
printf ("%d是质数 " , i);
}
exit(0);
}
}
//收尸
for (i = START; i < END; i++){
wait (NULL);
2)多线程
pthread_create(3) pthread_exit(3)
3)继承,多肽
子类继承父类的所有函数,多肽
直接使用recvfrom 阻塞等待客户端的数据的请求 处理完之后直接发给客户端