数据结构
One Piece&
这个作者很懒,什么都没留下…
展开
-
平衡二叉树的判断(C语言)
#include <stdio.h>#include <stdlib.h>/*平衡二叉树 必须满足的两个条件:1)、必须是搜索二叉树2)、每个节点的左子树和右子树的高度差最多为1 */typedef struct TreeNode{ int data; struct TreeNode *LeftNode; struct TreeNode *RightNode;}TreeNode;/*二叉树的深度*/int DeepTree(TreeNode原创 2020-09-14 21:32:38 · 2327 阅读 · 0 评论 -
给定一个节点,按中序遍历顺序输出二叉树的下一个节点 (C语言)
#include <stdio.h>#include <stdlib.h>/*搜索二叉树 结构体*/typedef struct TreeNode{ int data; struct TreeNode *LeftNode; struct TreeNode *RightNode; /*找下一个节点的时候用*/ struct TreeNode *ParentNode;}TreeNode;/*中序遍历*/void MidSearch(原创 2020-09-14 20:02:59 · 492 阅读 · 0 评论 -
搜索二叉树节点的查找与删除 (C语言)
#include <stdio.h>#include <stdlib.h>/*创建一颗 搜索二叉树 结构体*/typedef struct TreeNode{ int data; struct TreeNode *leftTree; struct TreeNode *rightTree;}TreeNode;/*中序递归遍历*/ /* 递归的本质是压栈 */void mid_travel(TreeNode *Node){ if(原创 2020-09-14 16:26:41 · 2474 阅读 · 3 评论 -
顺时针打印矩阵
#include <stdio.h>#include<assert.h>/*顺时针打印矩阵*//*步骤: * 1、确定打几圈,有行或列中,小的那个决定 int i=(n+1)/2 * 2、写每一圈的打印逻辑*/#define N 3 /*N==col*//*打印一圈的逻辑*//*row:行 col:列time:用来记录打印了几圈*//*打印每一圈的逻辑*/void printMatrix(int (*str)[N],int row,int col原创 2020-09-18 09:35:31 · 68 阅读 · 0 评论 -
链表中倒数第K个节点
#include <stdio.h>#include <stdlib.h>/*常规做法:遍历两次,第一次求链表长度,第二次求对应节点 简化做法(只走一次):用两个指针,一个先走,另一个在他之后,k个节点,开始进*/typedef struct List{ int data; struct List *next;}List;/*创建并插入链表*/void CreatList(List *head,int data){ List *Te原创 2020-09-17 16:39:26 · 203 阅读 · 0 评论 -
反转链表提高(包含链表其他的常用操作) 附详细的注释和要注意的细节
#include <stdio.h>#include <stdlib.h>#include <time.h>/*反转链表*//*定义一个节点*/typedef struct node{ int data; struct node *next;}Node;/*将节点插入链表 用于后面创建一个链表*/void insertList(Node * head,int data){ /* 分配内存 */ Node *cur =原创 2020-09-11 15:01:50 · 151 阅读 · 0 评论 -
包含min函数的栈 (C语言)
#include <stdio.h>#include <stdlib.h>/*当堆中元素很多的时候,常规方法判断堆中最小值的事件复杂度是O(n);这道题的要求是事件复杂度是O(1),也就是一下子就能找到,不需要进行重复的操作用到了一个重要的思想: 空间换时间就是在顺序存储到栈的时候,同时定义一个辅助栈;前者正常存储,后者的栈,值存储当前最小的。以此类推,辅助栈的栈顶就是最小值O(n) : 遍历 (随着输入的增加而增加)O(1) :高斯函数(不管输入有多少,都原创 2020-09-12 20:17:15 · 289 阅读 · 0 评论 -
栈的压入弹出序列 (C语言)
#include <stdio.h>#include <stdlib.h>/*弹出序列算法的思路:依次将压入数组的元素压入栈中,每压一个元素,和弹出数组进行比较top–while循环判断,如果相同,弹出如果不想同,top++,继续压入*//栈的结构体/typedef struct Stack{int len;int top;int*space;}Stack;/栈的初始化/void initStack(Stack *s,int len){s->原创 2020-09-12 18:10:15 · 1183 阅读 · 0 评论 -
两个栈实现一个队列的功能
#include <stdio.h>#include <stdlib.h>#include <string.h>/栈和队列的相关操作//栈结构体/typedef struct Stack{int len; /栈的”格子数”,用来初始化和判满/int top; /游标,记录栈顶位置/char *space;}Stack;/栈的初始化/void initStack(Stack s,int len){/初始化,栈顶和栈底重合,空栈/s原创 2020-09-12 15:18:03 · 107 阅读 · 0 评论 -
孩子们的游戏(约瑟夫环)
#include <stdio.h>#include <stdlib.h>typedef struct Node{ int data; struct Node *next;}Node;/*小朋友的游戏时间复杂度:m*n-->当m、n取值很大的时候,时间复杂度就是 n*n 循环链表问题的一个应用:约瑟夫问题*//*构造环型链表 插入链表 将链表尾部和链表第一个节点(不是头节点)连接*/Node * createList(int num原创 2020-09-12 11:20:16 · 83 阅读 · 0 评论 -
判断链表内是否有环以及环的入口节点(C语言实现) 附详细的代码注释
#include <stdio.h>#include <stdlib.h>/*找到环的入口节点的核心思路:步骤:1)、确认链表中有环2)、计算环的长度3)、获得环的入口在获得环入口的时候,有如下公式:(式子说明:快指针移动的距离:s 慢指针移动的距离:m起点到入口点的距离:d 入口点到相遇点的距离:p 相遇点到入口点的距离:q快指针在环内移动的圈数:n )s = 2m; (1)环长g:p+qs = d+(p+q)*n+p (2)原创 2020-09-11 20:36:45 · 239 阅读 · 0 评论 -
单向链表的7种基本操作(创建、插入、查找、删除、排序(交换节点)、排序(交换数据)、销毁)代码实现(附详细注释)
代码实现如下:#include "list.h"#include <stdio.h>#include <stdlib.h>typedef struct _node /*定义一个节点,节点包含两部分,数据域和指针域*/{ int data; /*数据域*/ struct _node * next; /*指针域*/ /*next指向下一个节点的位置*/}Node; /*创建链表*/ /*带有头结点的链表(带原创 2020-09-06 18:27:23 · 559 阅读 · 0 评论 -
头插法详细图解
头插法的核心代码:/*L为链表,P为节点*/p->next = L->next;L->next = p;先以插入一个节点为例:以插入两个节点为例:(将节点1、2插入到链表L中)先插入节点1:再插入节点2:总结:每一个新节点的next始终指向头结点的next;头结点的next始终指向新结点!!!!...原创 2020-09-06 18:09:42 · 19117 阅读 · 6 评论