4 leoufung

尚未进行身份认证

Linux Kernel,Virtualization

等级
TA的排名 1w+

判别二叉树是否为二叉排序树 -- C语言

算法使用中序遍历的结果就是排序二叉树的排序输出(从小到大), 因此可以使用中序遍历 来实现判定二叉树是否为二叉排序树。注意,不能用递归比较root和left,right的大小关系,因为left,right无法判断和root,root->parent,root->parent->parent等的大小关系代码实现bool isBSTree(st_trNode * ...

2020-02-23 23:27:22

二叉树层次遍历 -- C语言

原理这个问题很难 直接 用 节点 的 指针( left、 right、 parent) 来 实现, 但是 借助 一个 队列 就可以 轻松 地 实现, 例如 图 8. 7 所示 的 二 叉 树 结构。 可以 按照 下面 的 方式 执行。(1) A 入队 CX。(2) A 出 队, 同时 A 的 子 节点 B、 C 入队( 此时 队列 有 B、 C)。(3) B 出 队, 同时 B 的...

2020-02-23 21:59:36

二叉排序树非递归遍历 -- C语言

原理1. 前序遍历对于 先 序 遍历 非 递归 算法, 这里 我们 使用 一个 栈( stack) 来临 时 存储 节点, 方法 如下。(1) 打印 根 节点 数据。(2) 把 根 节点 的 right 入栈, 遍历 左 子 树。(3) 遍历 完 左 子 树 返回 时, 栈 顶 元素 应为 right, 出 栈, 遍历 以该 指针 为 根 的 子 树。2. 中序遍历对...

2020-02-23 20:33:45

二叉排序树 -- C语言

数据结构二 叉 排序 树( Binary Sort Tree) 又称 二 叉 查找 树( Binary Search Tree)。 其 定义 为: 二 叉 排序 树 或者是 空 树, 或者是 满足 如下 性 质的 二 叉 树。(1) 若 它的 左 子 树 非 空, 则 左 子 树上 所有 节点 的 值 均 小于 根 节点 的 值。(2) 若 它的 右 子 树 非 空, 则 右 子 树上...

2020-02-23 20:27:37

用链表实现栈 -- C语言

算法草稿top 为链表的tail,botton 为链表的 head代码实现#include <stdio.h>#include <stdlib.h>#include "list.h"#include "stack.h"int dumpStack(st_stack * stack){ if(NULL == stack){ return SUCC...

2020-02-20 22:14:22

队列和栈的区别

队列 与 栈 是 两种 不同 的 数据 结构。 它们 有 以下 区别。(1) 操作 的 名称 不同。 队列 的 插入 称为 入队, 队列 的 删除 称为 出 队。 栈 的 插入 称为 进 栈, 栈 的 删除 称为 出 栈。(2) 可操作 的 方向 不同。 队列 是在 队 尾 入队, 队 头 出 队, 即 两边 都可 操作。 而 栈 的 进 栈 和 出 栈 都 是在 栈 顶 进行 的, 无法...

2020-02-20 19:40:29

队列的入队、出队、测长、打印 -- C语言

队列的特点是先进先出 FIFO代码实现#include <stdio.h>#include <stdlib.h>#include "list.h"#include "queue.h"int dumpQueue(st_queue * queue){ if(NULL == queue){ return SUCCESS; } st_dataNod...

2020-02-20 19:36:03

删除两个双向循环链表中相同数值节点 -- C语言

代码实现int removeDoubLoopListNodeByData(st_doubNode ** phead, int data){ if(NULL == phead ){ printf("%s: param error\n",__func__); return PARAM_ERR; } if(NULL == phead){ return SUCCESS; }...

2020-02-20 17:12:44

双向循环链表的插入 -- C语言

代码实现int insertDoubLoopSortedListNode(st_doubNode** phead, int data){ if(NULL == phead){ printf("%s: param error\n",__func__); return PARAM_ERR; } st_doubNode * head = NULL; st_doubNode * ...

2020-02-19 16:14:05

双向链表的快速排序 -- C语言

算法草稿代码实现/* head 和 tail 的指针的排序的时候,都有可能发生变化,所以这里使用二级指针 */int quickSortDoubList(st_doubNode** phead, st_doubNode ** ptail){ if(NULL == phead || NULL == *phead || NULL == ptail || NULL == *ptail)...

2020-02-18 23:24:37

双向链表节点的删除 -- C语言

代码实现st_doubNode * removeDoubListNode(st_doubNode** phead, int pos){ if(NULL == phead || pos < 0){ printf("%s: param error\n",__func__); return NULL; } st_doubNode * head = *phead; st_do...

2020-02-18 19:03:56

双向链表按照指定位置插入 -- C语言

代码实现void dumpDoubListReverse(st_doubNode * head){ if(NULL == head){ return; } st_doubNode * p = NULL; st_doubNode * tail = NULL; tail = head; while (NULL != tail->next){ tail = tail...

2020-02-18 17:02:44

双向链表按位置查找 -- C语言

代码实现st_doubNode * findDoubListPos(st_doubNode * head, int pos){ if(NULL == head || pos < 0){ return NULL; } if(0 == pos) { return head; } st_doubNode * p = NULL; st_doubNode * q = NU...

2020-02-18 16:06:33

双向链表的查找 -- C语言

代码实现st_doubNode* searchDoubListNode(st_doubNode* head, int num){ if(NULL == head){ return NULL; } st_doubNode* p = NULL; st_doubNode* q = NULL; p = head; while(NULL != p){ if(p->data...

2020-02-18 14:20:00

打印双向链表 -- C语言

代码实现void dumpDoubList(st_doubNode * head){ if(NULL == head){ return; } st_doubNode * p = NULL; printf("========= Dump Double List %p ===========\n\t", head); p = head; while (NULL != p){...

2020-02-18 14:03:47

取得双向链表长度 -- C语言

代码实现int getDoubListLen(st_doubNode * head){ int len = 0; st_doubNode * p = NULL; if(NULL == head){ goto out; } p = head; while(NULL != p){ len++; p = p->next; } out: return le...

2020-02-18 13:17:30

双向链表的建立 -- C语言

代码实现void dumpDoubList(st_doubNode * head){ if(NULL == head){ return; } st_doubNode * p = NULL; printf("========= Dump Double List %p ===========\n\t", head); p = head; while (NULL != p){...

2020-02-18 13:06:02

约瑟夫问题 -- C语言

问题描述据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k...

2020-02-17 20:30:45

合并有序链表 -- C语言

算法草稿代码实现int MergeSortedList(st_dataNode ** phead, st_dataNode * head2){ if(NULL == phead || NULL == *phead || NULL == head2){ printf("%s: param error\n",__func__); return PARAM_ERR; } ...

2020-02-17 16:55:21

测试链表是否打环 -- C语言

原理这里 有一个 比较 简单 的 解法。 设置 两个 指针 p1、 p2。 每次 循环 p1 向前 走 一步, p2 向前 走两步。 直到 p2 碰到 NULL 指针 或者 两个 指针 相等 时 结束 循环。 如果 两个 指针 相等, 则 说明 存在 环。代码实现bool whetherListLoop(st_dataNode * head){ if(NULL == head){ ...

2020-02-16 22:52:18

查看更多

勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。