
数据结构
文章平均质量分 68
常用数据结构
川渝小神丢
独立思考!
展开
-
数据结构知识点(链表、递归、树图)
1. 数据结构与算法一个可执行的程序分为数据的存储,数据的操作,能被计算机识别的程序语言。数据的存储分为个体的存储和个体与个体关系的存储,个体的存储可以忽略(比如存储器存储),个体与个体关系的存储即数据结构,个体与个体关系存储不一样,数据的操作也就不一样(泛型除外)。数据的操作也就是算法,算法分为狭义算法和广义算法,狭义算法是与数据的存储方式密切相关;广义算法与数据的存储方式无关,比如...原创 2020-03-21 17:02:36 · 731 阅读 · 0 评论 -
联合体的妙用
1. 联合体的定义 联合体在C中比较常用,它不像结构体一样,每个成员占用各自的存储空间,相互不影响,它的所有成员占用同一段内存空间,修改一个成员影响其它所有成员。联合体的定义和使用与结构体一样。2. 联合体的应用(1)判断大小端union IsLittle_Endian{ int a; char c;};union IsLittle_Endian un;un.a =1;if(un.c == 1){ //小端}else{ //...原创 2021-10-08 12:15:08 · 1225 阅读 · 0 评论 -
C语言中位域
1. C语言中位域也叫位段,经常在STM32或DSP固件库中应用。ANSI C标准中规定,有下面三种数据类型可以用于位域,signed int 和 unsigned int 和_Bool。struct { unsigned int a:1; unsigned int b:2; unsigned int c:1;}abc;2. 上面声明建立了2个1位的字段,1个2位的字段。abc.a或c可以赋值为0或1,而abc.b可以赋值为0~3,因为它占两位。:冒号后面的数字用来限定成员.原创 2021-10-08 10:57:28 · 2401 阅读 · 1 评论 -
Linux中List.h文件的分析和应用
本文介绍Linux中List.h文件,此文件中用双向链表实现了多种数据结构,比如队列,堆栈等,短小精湛,值得借鉴。此文件中还有哈希表的应用。原创 2021-10-07 12:04:39 · 2501 阅读 · 0 评论 -
线性表的链式存储结构(静态链表)
1. 静态链表的定义 首先要定义一个链表结点类型,为一个结构体,typedef struct spy { char *name; struct spy *next;}spy, *p_spy; 然后定义每一个结点,spy A = {"A", NULL};spy B = {"B", NULL};spy C = {"C", NULL};最后建立结点之间的链接,访问一个链表只需要一个头指针。 p_spy head = NULL; A.next = &B...原创 2021-10-07 11:20:59 · 362 阅读 · 0 评论 -
实际项目中数据结构的选择
如果不是什么大型,涉及高精尖、复杂算法的项目,尽量选择简单的数据结构,选取原则可以参考:1. 静态数组适合元素不超过100的场合。2. 动态数组适合元素不超过1000的场合。3. 链表适合元素不超过3000的场合。但是,有时候为了程序稳定性,特别是时刻都要动态分配内存的场合,可以抛弃动态分配,直接程序一开始就划定静态内存。原创 2016-08-17 20:06:55 · 957 阅读 · 0 评论 -
双向循环链表的应用
#ifndef DOUBLELINKEDLIST_H#define DOUBLELINKEDLIST_H/* 1.本库文件基于双向循环链表的应用 2.参考Linux内核源码的list.h文件 3.详细说明查看自己总结的文档《Linux中List.h文件的分析和应用》*/#include #include #include struct list_head { st原创 2016-05-29 12:24:43 · 1123 阅读 · 0 评论 -
用链表实现堆栈--链式栈
/* 一、关于链式栈的约定,(目的是在C语言中描述方便) 1.定义: (1)堆栈是一种先进后出的线性表; (2)它只允许在表的一端(栈顶)进行入栈和出栈运算,另一端为栈底,入栈和出栈时不需 要改变栈底指针; (3)运算受限的非循环单链表,它没有头结点,尾结点即栈底,栈底不存放有效数据, 只是指针域为NULL,链表中的插入删除操作在这里只能在栈顶进行。原创 2016-05-29 12:24:16 · 683 阅读 · 0 评论 -
用链表实现队列--链式队列
/* 一、关于链式队列的约定(目的是在C语言中描述方便) 1.定义: (1)队列是一种先进先出的线性表; (2)它只允许在表的一端进行入队,在另一端进行出队操作。在队列中,允许插入的一端 叫队尾,允许删除的一端较队头,即入队只能从队尾入,出队只能从队头出; (3)运算受限的非循环单链表,头尾结点都有,链表中的插入删除操作在这里只能在队头 队尾进行。原创 2016-05-29 12:22:52 · 8523 阅读 · 0 评论 -
线性表的链式存储结构(动态链表)
/* 一,数据结构书上对程序LinkedList.c的某些定义 1.线性表的链式存储结构 2.对于线性表的链式存储结构,不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点。 3.链表中的几个定义: (1)首结点,存放第一个有效数据的结点。 (2)尾结点,存放最后一个有效数据的结点,指针域为NULL。 (3)头结原创 2016-05-29 12:16:29 · 614 阅读 · 0 评论 -
用数组实现队列--静态队列
/* 一、关于静态队列的约定(目的是在C语言中描述方便) 1.定义:和栈相反,队列是一种先进先出的线性表,它只允许在表的一端进行插入,在另一端进行删除元素。在队列中,允许插入的一端叫队尾,允许删除的一端较队头,即入队只能从队尾入,出队只能从队头出。 2.初始化建空队列时,令front=rear=0;入队时,队尾指针rear增1;出队时队头指针增1。在非空队列中,队头指针front原创 2016-05-29 12:14:44 · 1065 阅读 · 0 评论 -
线性表的顺序存储结构(动态数组)
/* 一、数据结构书上对程序ArryList.c的某些定义 1.线性表的顺序存储结构 2.特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素。它的存储位置可用一个简单、直观的公式来表示。但这个特点也铸成了这种存储结构 的弱点:在作插入和删除操作时,需要移动大量元素。 二、写ArryList.c的目的: 1.提升写代码能力 2.体现存储原创 2016-05-29 12:04:26 · 406 阅读 · 0 评论 -
二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 基本原理:一个工人要维修一条 10km 长的电话线,首先他 需要定位出故障所在,如果沿着线路一小段一小段地查找,显然非常得困难,每查一个点都要爬一次电线杆,10km 长 的距离会有大约 200 多根电线杆。假设电线原创 2016-01-06 15:33:42 · 566 阅读 · 0 评论