C语言数据结构
C语言数据结构学习
jakerc
向阳
展开
-
C语言实现二叉树非递归遍历 存储复杂数据类型 详细备注
本文主要实现C语言二叉树的构造,存储复杂数据类型,通过栈对其进行非递归遍历,有详细备注1 二叉树构造2 根据数据data创建树节点3 中序遍历代码(文末有详细流程)4 前序遍历代码5 后序遍历代码6 总体测试代码7 以中序遍历为例解析主函数中构造的二叉树如下: 前序遍历通过栈实现,执行流程如下:(三种遍历方式均可通过这种方式理解) main函数测试输出如下:...原创 2022-07-13 21:55:32 · 475 阅读 · 0 评论 -
二叉平衡树AVL简介
代码实现可见下篇文章,本文主要讲二叉排序树到平衡树的实现过程。1 二叉平衡树的定义如果它的左子树不为空,那么左子树上所有节点的值均小于它的根节点的值 如果它的右子树不为空,那么右子树上所有节点的值均大于它的根节点的值 根节点的左子树和右子树均是二叉排序树 平衡二叉树中每个节点的左子树和右子树高度之差的绝对值小于等于1 没有键值相等的节点平衡二叉树是二叉排序树的进化,是第一个引入平衡概念的二叉树,很好地解决了二叉排序树(二叉查找树)退化为链表的问题;平衡二叉树进行删除和插入一个节点时,原创 2022-01-27 12:00:00 · 337 阅读 · 0 评论 -
C语言实现 二叉排序树 的插入、删除、查找(详细图解)
1 二叉排序树:如果它的左子树不为空,那么左子树上所有节点的值均小于它的根节点的值如果它的右子树不为空,那么右子树上所有节点的值均大于它的根节点的值根节点的左子树和右子树均是二叉排序树 (二叉排序树可能退化为链表,所以有平衡二叉树的概念)...原创 2022-01-26 12:00:00 · 11136 阅读 · 2 评论 -
C语言实现 二叉树 的复制、销毁、非递归遍历
前文讲了二叉树的创建,递归遍历和完全基于栈的非递归遍历,叶子节点、树高等计算方法。以下主要分析二叉树的复制、销毁、以及但含有递归思想的非递归遍历方法。1 二叉树节点构建,与前文一致,不再分析typedef struct Tree //二叉树{ void *data; //数据域,void* 可保存任意数据类型的地址 struct Tree *left; //左子节点指针 struct Tree *right; //右子节点指针} Tree;Tree原创 2022-01-24 18:00:00 · 3202 阅读 · 0 评论 -
C语言实现 二叉树 的非递归遍历(详细图解)(基于栈的顺序存储)
分析主要分析二叉树的非递归遍历,基于栈顺序存储二叉树的节点。1 实现思路(具体的分析过程会在以下函数实现部分分析) 将树的所有节点标志位置为假(0) 将根节点压入栈中 进入循环,只要栈中元素个数大于0,进行循环操作 弹出栈顶元素 如果栈顶元素标志为真,直接输出,进行下次循环即可 如果栈顶元素标志为假,将标志改为真,并将节点的右子树、左子树、根压入栈中,再执行下次循环。2 创建树节点...原创 2022-01-21 19:56:42 · 3348 阅读 · 0 评论 -
C语言实现 二叉树 对任意类型数据的遍历、叶子节点统计、树高计算
本文主要实现C语言对二叉树的构造,可存储所有类型数据,实现数据域的遍历,本文主要介绍递归的遍历方法,含详细图文;以及树高、叶子节点的计算等。1 二叉树构造typedef struct Tree //二叉树{ void *data; //数据域,void* 可保存任意数据类型的地址 struct Tree *left; //左子节点指针 struct Tree *right; //右子节点指针} Tree;2 根据数据data创建树节点Tree原创 2022-01-20 18:49:25 · 1071 阅读 · 1 评论 -
C语言实现 队列 的链式存储
上文已写队列的顺序存储,本文介绍队列的链式存储1 队列构造typedef struct Node{//节点数据 void *data; struct Node *next;} Node;typedef struct Queue//队列构造{ Node firstNode; int size;//队列大小} Queue;2 队列初始化Queue *initQueue()//队列初始化{ Queue *queue = (Queue *)mal原创 2022-01-21 12:00:00 · 412 阅读 · 1 评论 -
C语言实现 队列 的顺序存储
队列与栈的实现十分相似,栈作为一种“先进后出”的数据结构,队列则是只允许在一端进行插入,在另一端进行删除的线性表,“先进先出”。以下给出C语言中队列的顺序存储方法。1 通过结构体构造队列#define MAX 1000typedef struct Queue//队列构造{ void *p[MAX];//数据域,数组存储指针(地址) int size;//队列大小} Queue;2 队列初始化Queue *initQueue()//队列初始化{ Queue原创 2022-01-20 12:00:00 · 1432 阅读 · 0 评论 -
C语言实现 单链表 处理任意类型数据
企业开发中,C语言链表不仅仅存储基本数据类型,应对任意的void data均可实现增删改查。在前面的一篇文章中,已经分享了单向链表、双向链表、有头节点和无头节点等链表对基本数据的处理。以下主要分析对复杂类型数据的处理,是以无有效头节点的单向链表为例。1 结构体构建Node节点typedef struct Node //链表节点定义{ void *data; //节点的数据域,存址 struct Node *next; //指针域,保存下一个节点的地址,指向下一个节点原创 2022-01-19 12:00:00 · 1337 阅读 · 0 评论 -
C语言实现 栈 的链式存储
前篇文章已分析栈的顺序存储,以下分析栈的链式存储。并采取不同于上文的构建方式,实现入栈(push)、出栈(pop)、返回栈顶(peek)等操作。1 结构体构建链表节点typedef struct Node //链表节点构造{ void *data; //数据域,传址,任意数据类型 struct Node *next; //指针域} Node;2 结构体构建栈typedef struct Stack //栈{ Node firstNode; //原创 2022-01-18 17:27:19 · 943 阅读 · 0 评论 -
C语言实现 单链表和双链表 处理基本类型数据
C语言链表在开发过程十分重要,以下为详细的实现过程,包括单向链表、双向链表,含头节点链表,不含头节点链表,以及封装链表。如有错误,欢迎大家指出,一块学习交流。1 单向链表实现(有表头--存储基本数据)1.1 单项链表构造typedef struct Node //单链表定义{ int data;//先以基本数据类型为例,后再分析复杂数据类型 struct Node *next;} Node;1.2 创建单链表表头,此表头不含有效数据Node *headNod原创 2022-01-17 14:55:58 · 410 阅读 · 0 评论 -
C语言实现 动态数组 处理任意类型数据
十分详细的C语言实现动态数组分析原创 2022-01-16 17:38:59 · 1466 阅读 · 5 评论