S8: 数据结构
文章平均质量分 54
顺链表
静思心远
嵌入式&&人工智能
展开
-
数据结构基础
数据结构基础顺序表 链表队列栈树图排序顺序表 链表顺序表链表单链表逆序1.0单链表逆序2.0(重新整理)队列栈树图排序原创 2022-03-11 21:09:56 · 254 阅读 · 0 评论 -
二叉树
二叉树1.介绍2. instance analysis1.介绍一 二叉树数据类型typedef struct btree{ DATATYPE data; struct btree *lchild; struct btree *rchild;}BTREE;例如:创建一个有N(6)个节点的完全二叉树特性:对于给定的序号K左存在 2 * k <= N ,序号:2k 右存在 2 * k + 1 <= N,序号:2k + 1创建过程:create_binaytree(原创 2020-11-29 22:43:06 · 262 阅读 · 0 评论 -
hashtable
#include <stdio.h>#include <stdlib.h>#define MAX 15#define ARRY_SIZE(A) (sizeof(A)/sizeof(A[0]))static struct node{ int data; struct node *next;}*global_arry[MAX];int insert_hash_table(int data){ int index; struct node **p; str原创 2020-11-29 23:14:05 · 115 阅读 · 0 评论 -
树、森林和二叉树的转换
树转换为二叉树(1)加线。在所有兄弟结点之间加一条连线。(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。(3)层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子)森林转换为原创 2016-12-03 23:30:20 · 400 阅读 · 0 评论 -
图
图1.图的介绍2.图 instance analysis1.图的介绍一 图数据类型邻接矩阵存储typedef VTYPE int;typedef struct{ VTYPE v[N]; int matrix[N][N];}Graph;Graph *create_graph(){ G = 分配空间 初始化顶点 for(i = 0; i < N;i ++) { G->v[i] = i; } return G;}int input_edge(Gr原创 2020-11-29 23:12:48 · 213 阅读 · 0 评论 -
shmqueue共享内存队列
学习一下优秀的开源代码:main.cpp//// main.cpp// Demo//// Created by 杜国超 on 17/6/22.// Copyright © 2017年 杜国超. All rights reserved.//#include <iostream>#include <unistd.h>#include <thread>#include <atomic>#include <list>#i原创 2020-09-18 17:42:03 · 1412 阅读 · 0 评论 -
ringbuffer
ringbuffer有很多种实现方法,一个一个整理出来ByteBuffer.h#ifndef _RING_BUFFER_H#define _RING_BUFFER_H#include <stdint.h>/* * Circular buffer of bytes. */class ByteBuffer {public: ByteBuffer(uint32_t size); ~ByteBuffer(void); // number of bytes原创 2020-12-01 08:39:29 · 637 阅读 · 0 评论 -
ARM内存屏障 (memory barrier)
barrier.h#define isb() asm volatile("isb" : : : "memory")#define dmb(opt) asm volatile("dmb " #opt : : : "memory")#define dsb(opt) asm volatile("dsb " #opt : : : "memory")#define csdb() asm volatile("hint #20" : : : "memory...转载 2020-08-21 16:18:02 · 1399 阅读 · 2 评论 -
链队
一 链式队列//节点类型struct node{ DATATYPE data; struct node *next;};//队列头类型typedef struct{ //记录链表头的位置 struct node *front; //记录链表尾的位置 struct node *rear;}LinkQueue;二 操作LinkQueue *create_empty_queue(){ 1.分配链表头 2.分配队列头...原创 2020-08-23 09:45:06 · 221 阅读 · 0 评论 -
循环队列
一 循环队列typedef struct{ DATATYPE buf[MAX]; int front; int rear;}LoopQueue;规定:1.队空条件q->front == q->rear;2.队满条件(q->rear + 1) % MAX == q->front;3.front和rear更新原则q->front = (q->front + 1) % MAX;q->rear = (q->...原创 2020-08-23 09:45:34 · 216 阅读 · 0 评论 -
线性队列或顺序队列
代码:#include <stdio.h>#include <stdlib.h>#define MAX 5typedef int DATAYTYPE;typedef struct { //存放数据 DATAYTYPE buf[MAX]; //记录第一个元素的下标 //出队的时候通过front出队 int front; //记录最后一个元素的下标 //入队的时候通过rear入队 int rear;}SeqQueue;SeqQueue原创 2020-08-23 09:47:22 · 190 阅读 · 0 评论 -
linux内核--使用内核队列实现ringbuffer
ringbuffer1.instance analysis1.instance analysis/**@brief 仿照linux kfifo写的ring buffer *@atuher Anker date:2013-12-18* ring_buffer.h * */ #ifndef KFIFO_HEADER_H #define KFIFO_HEADER_H #include <inttypes.h>#include <string.h>#include原创 2020-11-22 21:57:53 · 900 阅读 · 0 评论 -
单链表逆序2.0(重新整理)
单链表逆序背景一.单链表基本节点二.逆序实现的几种方式1.1 head->A->B->C->NULL ==> NULL<-A<-B<-C<-head1.2 head->A->B->C->NULL ==> NULL<-A<-B<-C<-head2.递归的思想背景“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额原创 2021-07-17 11:47:07 · 366 阅读 · 2 评论 -
链栈
一 LinKStack节点类型struct node{ DATATYPE data; struct node *next;};栈头的类型typedef struct{ //记录栈顶的位置 struct node *top; //记录栈中元素的个数 int n;}LinKStack;A.创建空栈LinKStack *create_empty_stack(){ LinKStack *s; s = (LinKSta...原创 2020-08-23 09:46:21 · 137 阅读 · 0 评论 -
线性栈
介绍:一 顺序栈规定:先进后出数据类型#define MAX 10typedef struct{ DATATYPE buf[MAX]; int top;//栈顶元素的下标}SeqStack;A .创建SeqStack *create_stack(){ SeqStack *s; s = 分配空间; s->top = -1; return s;}B.栈空int is_empty_stack(SeqStack *s);C.栈满int原创 2020-08-23 09:46:08 · 225 阅读 · 0 评论 -
joseph问题
Joseph问题1.Joseph描述:2.instance analysis1.Joseph描述:原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是start的人开始报数,数到第num个人出列,然后从出列的下一个人重新开始报数,数到第num个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,start=1,num=5的时候,出列的顺序依次是5,4,6,2,3,1。2.instance analysis#include <stdio原创 2020-11-29 22:17:07 · 575 阅读 · 0 评论 -
单链表逆序1.0
单链表逆序1.第二个题目是很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个问题,链表的初始状态如图(1)所示:图(1)初始状态原创 2016-10-18 20:34:07 · 437 阅读 · 0 评论 -
链表
链式存储:前一个元素记录后一个元素的位置链表特点:1.有一个头节点,头节点不存放数据,只记录第一个元素所在的地址2.有个尾部节点,它的指针域为NULL数据类型typedef struct node{ DATATYPE data; struct node *next;}LinkList;A.创建一个空链表LinkList *create_empty_linklist(){ 1.head : 分配空间 2.head->next = NULL; 3.return he.原创 2020-08-23 09:44:21 · 325 阅读 · 0 评论 -
顺序表
分析和整理思路:一 线性表关系:一对一关系1.顺序存储A.数据类型typedef int DATATYPE;typedef struct{ //存放数据 DATATYPE buf[MAX]; //数据的个数 int n;}SeqList;B.常用的算法(1).创建顺序表SeqList *create_seqlist(){ 分配空间 初始化n的值 return addr}(2)插入元素int insert_seqlist(SeqList *L原创 2020-08-23 09:43:54 · 238 阅读 · 0 评论