示例代码 : /** * 基数排序-单链表实现 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define Error(Str) FatalError(Str) #define FatalError(Str) fprintf(stderr, "%s\n", Str), exit(1) #define N 10 /
剑指offer版本 创建一个结点 链接两个结点(链表) 打印某个结点的值 打印pHead之后的链表 销毁pHead之后的链表 //================================================================== // 《剑指Offer——名企面试官精讲典型编程题》代码 // 作者:何海涛 //======================
牛客网原题目链接:二叉树的下一个结点。 题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路: 对于一个给定的二叉树,题目要求中序遍历,中序遍历的顺序是先中序遍历左子树,再根节
数据结构——栈 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 来源:力扣(LeetCode) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL
插入算法和删除演示: #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> typedef struct Node { int data; //数据域 struct Node * pNext; //指针域 }Node, *pNode; //函数声明 pNode create_list(); void traverse_list(pNod
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 来源:力扣(LeetCode) 解法一:快慢指针,一次遍历。
/******************************************************************* Copyright(c) 2016, Harry He All rights reserved. Distributed under the BSD license. (See accompanying file LICENSE.txt at https://github.com/zhedahht/CodingInterviewChinese2/blob/master/
// 面试题35:复杂链表的复制 // 题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复 // 制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个 // 结点外,还有一个m_pSibling 指向链表中的任意结点或者nullptr。 #include <cstdio> #include "Comp
从根节点到叶子点的最长路径上的结点数为深度 方法:根据树的特性,比较左右子树,选那个长的加1;大问题小化递归计算 int TreeDepth(BinaryTreeNode pNode){ //边界,叶子的下一个返回0 if(pNode==null ) return 0; int L= TreeD
方法1:三指针法 1 ListNode f1( LstNode head){ 2 ListNode phead=null; 3 4 ListNode pnode=head; 5 ListNode pPre=null; 6 7 while( pnode!=null){ 8 ListNode p
实验环境 本次实验的环境是Windows 10+VS Code,实验用到的代码先在Linux环境下解压再拷贝到Windows中。 编译、运行 先进入代码所在目录,然后输入指令“gcc -o test linktable.c menu.c”得到可执行文件“test.exe” 可以看到,我们的目录下生成了可执行文件。 运行“test.exe
一、测试运行 1、安装配置MinGW后,在VS中编译报错,如图: 2、后来参考其他同学,用linux进行编译,于是改变环境,连接了Ubuntu进行编译: 3、添加头文件#include<string.h>后,传至Ubuntu虚拟机,重新编译运行,结果如下: 二、寻找错误 1、可以在代码中发现,当输入quit时,此时出了问题: 2、进
1.1、运行环境linux,编译工具gcc,实验代码lab5-1.tar.gz 即http://pan.baidu.com/s/1pJ0qAIv 1.2、使用gcc编译程序linktable.c和menu.c,即使用命令gcc -o test linktable.c menu.c,将linktable和menu.c编译成可执行文件,名为test。 注意需要在menu.c的头文件中加入#include<string.h
一.VSCode下编译运行 通过如下编译命令 gcc -o test linktable.c menu.c 在当前工作目录下生成一个test.exe可执行文件 二.通过VSCode+GDB调试程序找出quit命令无法运行的bug产生的原因 源码分析 输入quit 发现提示错误命令wrong cmd 试着找出quit无法运行的原因,查看源
1、编译运行相关程序 1.1、运行环境Ubuntu18.04,编译工具gcc,实验代码lab5-1.tar.gz 即http://pan.baidu.com/s/1pJ0qAIv 1.2、使用gcc编译程序linktable.c和menu.c,即使用命令gcc -o test linktable.c menu.c,将linktable和menu.c编译成可执行文件,名为test。 注意需要在menu.
一、实验要求 在VSCode下编译运行lab5-1.tar.gz 通过VSCode+GDB调试程序找出quit命令无法运行的bug产生的原因 分析callback接口的运行机制,总结callback接口设计的方法 二、实验过程 首先安装好vscode和MinGW并配置好环境变量。 在vscode下导入实验所需
typedef struct ThreadNode{ int data; struct ThreadNode *lchild,*rchild,*pnode; int ltag,rtag; }ThreadNode,*ThreadTree; ThreadNode *pre=NULL; //初始化一棵树 void initTree(ThreadTree &T){ T = (ThreadNode *)malloc(sizeof(ThreadNode));
题目链接:二叉树的下一个结点 题意:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 题解:中序遍历查找下一个节点。也是数据结构里的常见题。 当前节点如果有右子树,下一个节点是右子树最
#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef struct node{ int data; struct node *next; }Node, *pNode; pNode rear_create(int n){//尾插法建立 pNode head = (pNode)malloc(sizeof(Node)); pNode rear = head;//注意与头插法不同地方
剑指offer-8 二叉树的下一个节点题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: 右侧有节点,直接打印 右侧没节点 此节点的父节点的左节点是自己,打印 此节点的父节点的右节点是
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结 点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指 针。 思路:若节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指 向左子结点的指针找到的叶子节点即为下一个节点;若节
之前的博文写过了,单链表的实现方式,今天补充一下双链表的实现方式吧!其实原理也很简单~ 话不多说,直接撸码走起~ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DoubleLinkList { pub
内存 先来谈谈内存 代码区里存放程序的代码,即CPU执行的机器指令,并且是只读的; 全局区里存放定义的全局变量; 栈区里存放着定义的局部变量,系统自动回收释放; 堆区需要手动申请malloc,手动释放free (栈区内存小,堆区内存很大很大) 学习数据结构先得明白内存! 链表 鄙人普通本科,表示老
建立新链表进行反转 struct ListNode{ int val; struct ListNode *next; } class solution{ public: ListNode* ReverseList(ListNode* pHead){ ListNode* pNode=pHead; //当前节点 ListNode* pPrev=nullptr; //前一个节点 ListNode*