C的数据结构
你想知道的数据结构都在这里....
LoveHoneyYou
知识改变命运,科技改变生活!
展开
-
再学C的数据结构---二叉树递归遍历
二叉树的递归遍历原创 2022-07-25 13:53:35 · 209 阅读 · 0 评论 -
再学C的数据结构---绪论
绪论原创 2022-07-10 11:18:47 · 238 阅读 · 0 评论 -
再学C的数据结构---顺序表
顺序表原创 2022-07-10 16:31:01 · 158 阅读 · 0 评论 -
再学C的数据结构---单链表
单链表原创 2022-07-11 18:22:13 · 83 阅读 · 0 评论 -
再学C的数据结构---静态链表
静态链表原创 2022-07-12 10:39:49 · 168 阅读 · 0 评论 -
再学C的数据结构---单向循环链表
单向循环链表原创 2022-07-13 10:50:03 · 62 阅读 · 0 评论 -
再学C的数据结构---双向链表
双向链表原创 2022-07-14 10:05:42 · 56 阅读 · 0 评论 -
再学C的数据结构---双向循环链表
双向循环链表原创 2022-07-15 10:46:12 · 102 阅读 · 0 评论 -
再学C的数据结构---顺序栈
顺序栈原创 2022-07-16 16:10:49 · 121 阅读 · 0 评论 -
再学C的数据结构---链栈
链栈原创 2022-07-16 17:37:57 · 63 阅读 · 0 评论 -
再学C的数据结构---栈的应用
栈的简单应用原创 2022-07-16 20:49:20 · 187 阅读 · 0 评论 -
再学C的数据结构---链式队列
链式队列原创 2022-07-17 11:07:50 · 248 阅读 · 0 评论 -
再学C的数据结构---顺序队列
顺序队列原创 2022-07-17 11:50:25 · 245 阅读 · 0 评论 -
再学C的数据结构---循环队列
循环队列原创 2022-07-17 12:56:26 · 90 阅读 · 0 评论 -
~~顺序表~~
1.线性结构的特点是:在数据元素的非空有限集中:(1).存在唯一的一个被称为“第一个”的数据元素(2).存在唯一的一个被称为“最后一个”的数据元素(3).除第一个之外,集合中的每个数据元素都只有一个前驱(4).除第一个之外,集合中每个集合数据元素都只有一个后继线性表中数据元素必须是连续2.线性表的定义线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。至于每个元素的具体含义,在不同的情况下各不相同,它可以是一个整数或一个字符,也可以是更复杂的信息。在原创 2022-01-08 18:02:29 · 973 阅读 · 0 评论 -
C的数据结构---基本概念
1. 2 .算法最终要编译成具体的计算机指令每一个指令,在具体的计算机 cpu上运行的时间是固定的通过具体的n的步骤的多少就可以推导出算法的复杂度3.1)判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次项和常数项可以忽略2)在没有特殊说明时,我们所分析的算法时间复杂度都是指最坏时间复杂度4 .在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或煮多次。设计一个算法,找出出现次数最多的数完。//空间换时间#includ原创 2022-02-21 13:12:56 · 128 阅读 · 0 评论 -
C的数据结构练习1----顺序表应用
根据我们昨天写的顺序表,今天我们将两个由小到大排列的顺序表,合并到第三个顺序表,依然是由小到大排列#include "Seq_list.h"void Small_Large_Merg(Seq_list*p_La, Seq_list*p_Lb, Seq_list*p_Lc){ assert(p_La != NULL&&p_Lb != NULL&&p_Lc != NULL); p_Lc->Curr_Cap = p_La->Curr_Cap + p_原创 2022-01-11 13:03:40 · 131 阅读 · 0 评论 -
C的数据结构练习2---数组
1.单调数列//单调数列#include <stdlib.h>#include <stdio.h>#include <stdbool.h>#include <assert.h>//递增bool Inc_Seq(int *arr, int num){ bool res = true; for (int i = 0; i < num-1; i++) { if (arr[i]>arr[i + 1]) { res原创 2022-01-24 21:06:06 · 544 阅读 · 0 评论 -
旋转数组的三种方法
方法一:每次右移一个数,数组中的所有元素都要移动方法二:整体导入方法三:三步旋转法#include <stdio.h>#include <stdlib.h>#include <assert.h>void Mov_Arr(int *arr, int size) //右移一位{ assert(arr != NULL); int tmp = arr[size - 1]; for (int i = .原创 2022-01-23 15:01:48 · 565 阅读 · 0 评论 -
C的数据结构---带头结点的单链表
补充知识:结构体中嵌套结构体:1.结构体中可以嵌套另一个结构体类型的数据⒉结构体中可以嵌套指向自身的指针和指向另一个结构体的指针3.结构体中不能嵌套自己类型的数据(无穷递归,确定不了数据类型的内存大小,分配不了内存)链表:链表是一种物理存储单元上非连续的存储结构,由一系列(链表中每一个元素称为结点)组成,结点可以在运行时动态生成,结点与结点之间通过指针链接。每个结点包括两部分: 一部分是存储数据元素的数据域,另一部分是存储下一个结点地址的指针域1). 链表是一种常用的数据结构原创 2022-02-22 16:57:55 · 1010 阅读 · 0 评论 -
C的数据结构---带头单链表2
Yhp_Single_LinkList.h#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <crtdbg.h> typedef int ElemType;typedef struct LinkNode{ ElemType data; struct LinkNode *..原创 2022-03-17 20:58:15 · 528 阅读 · 0 评论 -
不带头结点的单链表
Don't_Lead_Link_List#pragma once#include <crtdbg.h> #include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <stdbool.h>typedef int States; //状态值#define TURE 1#define FALS原创 2022-04-16 23:14:46 · 874 阅读 · 0 评论 -
单链表逆置的四种方法
1. 三个辅助指针变量p 向前推进 s缓存p pre缓存s没有数据节点 或者 只有一个 不需要逆置void Single_Link_Inver(LinkList head){ assert(head != NULL); if (head->next == NULL || head->next->next == NULL) { return; } LinkNode *p = head->ne...原创 2022-03-18 23:32:54 · 818 阅读 · 0 评论 -
不带头结点单链表打印倒数第k个数
1.len-k 化倒数为正数// 1. len-k#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct LinkNode{ ElemType val; struct LinkNode *next;}LinkNode;void Print_Rec_Ele_A(LinkNode *L, int k){ if (L == NULL || k <...原创 2022-03-31 16:37:09 · 957 阅读 · 0 评论 -
单链表返回中间结点
1. #include <stdio.h>#include <stdlib.h>typedef struct LinkNode{ int data; struct LinkNode *next;}LinkNode;LinkNode* LinkNodemid_A(LinkNode *head){ if (head == NULL || head->next == NULL) { return head; } int n = 0;...原创 2022-04-05 16:10:32 · 1452 阅读 · 0 评论 -
单链表中带环的问题
1. 判断链表中是否带环思路:思考:为什么 slow走一步,fast走要两步,一定会在环的某位置相遇吗?原创 2022-04-20 17:24:40 · 471 阅读 · 0 评论 -
带头循环双向链表
Bring_To_Circu_Bid_List.h#pragma once#include <crtdbg.h> #include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <stdbool.h>typedef int States; #define TURE 1#define FA..原创 2022-04-24 12:51:33 · 970 阅读 · 0 评论 -
C的数据结构---非传统链表
传统链表的缺点:和具体结构绑定,不通用链表逻辑试图包含业务逻辑(业务数据)业务数据和链表逻辑耦合性太高不能将大千世界,芸芸众生包含起来#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>typedef struct BuyNode{ struct BuyNode* next;}BuyNode;typedef st.原创 2022-02-23 11:12:22 · 604 阅读 · 0 评论 -
C的数据结构---线性表的链式存储(带头通用链表)
1.链式存储定义为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息n个节点链接成一个链表,即为线性表的链式存储结构,因此链表的每个节点中只包含一个指针域,所以叫单链表。单链表正是通过每个节点的指针域将线性表中的数据元素按其逻辑次序链接在一起2.head.h#pragma once#include <crtdbg.h> #include <stdio.h>#include <stdl.原创 2022-03-01 18:09:25 · 470 阅读 · 2 评论 -
C的数据结构---循环链表
1.插入结点的思想2. 头删head.h#pragma once#include <crtdbg.h> #include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>typedef void CircuList;typedef struct CircuListNod...原创 2022-03-03 14:40:21 · 548 阅读 · 0 评论 -
C的数据结构---双向链表
1.插入思想2.删除思想优点:双向链表在单链表的基础上增加了指向前驱的指针功能上双向链表可以完全代替单链表使用双向链表的Next,Pre和Current操作可以搞笑的遍历链表中的元素#pragma once#include <crtdbg.h> #include <stdio.h>#include <stdlib.h>#include <assert.h>#include <strin...原创 2022-03-03 23:32:20 · 198 阅读 · 0 评论 -
链表和顺序表的总结
顺序表:优点:1)支持随机访问,需要随机访问结构的算法可以很好的应用2)cpu高速缓存命中率更高缺点:1)头部中部插入时间效率低 O(N)2) 连续的物理空间,空间不够了以后需要增容,增容有一定程度消耗 3) 为了避免频繁增容,一般我们都按倍数去增容,用不完存在一定的空间浪费链表(带头双向循环链表)优点: 1)任意位置插入删除效率高 O(1) 2) 按需申请释放空间缺点:1)不支持随机访问(用下标访问)意...原创 2022-05-02 18:21:55 · 626 阅读 · 0 评论 -
C的数据结构---栈的顺序存储
栈是一种 特殊的线性表栈仅能在线性表的的一端操作进行操作栈顶:允许操作的一端栈底:不允许操作的一端原创 2022-03-06 19:59:52 · 411 阅读 · 0 评论 -
C的数据结构---栈的链式存储
chain_stack.h#pragma once#include <crtdbg.h> #include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <stdbool.h>typedef int States; //状态值#define TURE 1#define FALSE 0#de原创 2022-03-06 23:53:36 · 393 阅读 · 0 评论 -
栈的应用---括号匹配
思路:从第一个字符开始扫描当遇见普通字符时忽略当遇见左符号时压入栈中当遇见右符号时从栈中弹出栈顶符号,并进行匹配 匹配成功:继续读入下一个字符 匹配失败:立即停止,并报错结束:成功:所有字符扫描完毕,且栈为空失败:匹配失败或所有字符扫描完毕但栈非空Stack_Pare_Match.h#include "Chain_Stack.h"bool isLeft(char c);bool isRight(cha...原创 2022-03-08 15:57:56 · 126 阅读 · 0 评论 -
栈的应用---中缀转后缀
思路:遍历中缀表达式中的数字和符号:对于数字:直接输出对于符号:左括号:进栈运算符号:与栈顶符号进行优先级比较左括号:进栈运算符号:与栈顶符号进行优先级比较若栈顶符号优先级低:此符号进栈(默认栈顶若是左括号,左括号优先级最低)若栈顶符号优先级不低;将栈顶符号弹出并输出,之后进栈右括号:将栈顶符号弹出并输出,直到匹配左括号遍历结束:将栈中的所有符号弹出并输出后缀表达式计算遍历后缀表达式中的数字和符号对于数字:进栈对于符号: 从栈中...原创 2022-03-08 20:50:58 · 208 阅读 · 0 评论 -
C的数据结构---顺序队列
队列是一种特殊的线性表队列仅在线性表的两端进行操作队头(Front):取出数据元素的一端队尾(Rear):播入数据元素的一端队列不允许在中间部位进行操作SeqQueue.h#include "seqlist_head.h"typedef void SeqQueue;SeqQueue* SeqQueue_Creat(int capacity);void SeqQueue_Destroy(SeqQueue *pqueue);void SeqQueue_.原创 2022-03-09 21:42:43 · 230 阅读 · 0 评论 -
C的数据结构---链式队列
Chain_Queue.h#include "Lead_gen_link_list.h"typedef struct LinkQueueNode{ LinkListNode node; void *item;}LinkQueueNode;typedef void LinkQueue;LinkQueue* LinkQueue_Creat(); void LinkQueue_Destroy(LinkQueue *pqueue);void LinkQueue_Clear(Li.原创 2022-03-10 11:20:45 · 591 阅读 · 0 评论 -
C的数据结构---头尾指针队列
.h#pragma once#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <assert.h>#include <crtdbg.h> typedef int QElemType;typedef struct QueueNode{ struct QueueNode* next; QElemType data;}QueueNode;原创 2022-05-09 12:57:50 · 430 阅读 · 0 评论 -
C的数据结构---树的概念
在数据库中保存树的关系节点表节点关系表二叉树的定义定义:是n (n>=0)个结点的有限集合,由一个根结点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成逻辑结构:一对二(1:2)基本特征:1)每个结点最多只有两棵子树(不存在度大于2的结点)2)左子树和右子树次序不能颠倒(有序树)二叉树的性质性质1:在二叉树的第i层上至多有 2^( i - 1) 个结点性质2:深度为k的二叉树至多有 2^( k - 1) 个结点..原创 2022-03-10 23:41:39 · 373 阅读 · 0 评论