数据结构
Static Final
青春没有对与错,只有愿不愿意,值不值得!
展开
-
二叉树的前序,中序,后续遍历,及求二叉树节点的个数
#pragma once#include<stdio.h>#include<assert.h>typedef struct Node{ int value; struct Node *left; struct Node *right;}Node;分析过程:以前序遍历为例:void preorderTraversal(Node * ...原创 2019-05-02 17:03:54 · 424 阅读 · 0 评论 -
非递归的前序遍历
1.先创建一棵树非递归二叉树.h利用中序和后序int Find(char array[], int size, char v){ for (int i = 0; i < size; i++){ if (array[i] == v){ return i; } } return -1;}No...原创 2019-05-04 12:30:09 · 681 阅读 · 0 评论 -
非递归的中序遍历
1.先创建一棵树非递归二叉树.h利用中序和后序int Find(char array[], int size, char v){ for (int i = 0; i < size; i++){ if (array[i] == v){ return i; } } return -1;}No...原创 2019-05-04 19:47:50 · 7277 阅读 · 0 评论 -
非递归的后序遍历
1.先创建一棵树非递归二叉树.h利用中序和前序int Find(char array[], int size, char v){ for (int i = 0; i < size; i++){ if (array[i] == v){ return i; } } return -1;}No...原创 2019-05-05 10:51:34 · 1192 阅读 · 0 评论 -
二叉树的最近公共祖先
题目描述: 给定一颗二叉树,找到该树中两个指定节点的最近公共祖先思路:利用递归,在左子树和右子树中分别找Node * find(Node * root, Node *p){ if (root == NULL){ return NULL; } if (root == p){//找两个节点的地址 return p; }...原创 2019-05-05 12:39:21 · 317 阅读 · 0 评论 -
二叉搜索树(红黑树,AVL树)转换成排序双向链表
题目描述: 二叉搜索树就是左子树的值都比根小,右子树的值都比根大#pragma once#include<stdio.h>#include<assert.h>typedef struct Node{ int value; struct Node *left; struct Node *right;}Node;Node *p...原创 2019-05-05 13:20:04 · 347 阅读 · 0 评论 -
找到列表中第一次出现v的位置,然后做删除
typedef int SListDataType;//链表中的一个节点typedef struct Node{ SListDataType value; //值 struct Node *next; //下一个节点的地址 }Node;//单链表typedef struct SList{ Node *first;// *head 第一个...原创 2019-04-29 21:41:51 · 109 阅读 · 0 评论 -
二叉堆的向下调整
前提介绍:二叉堆 顺序存储的方式 更多用在完全二叉树AB C A B C D E F D E F 0 1 2 3...原创 2019-05-05 21:23:56 · 304 阅读 · 0 评论 -
快排的三种最常用方法
Hover 挖坑法 前后指针(两个下标) #pragma once #include<stdio.h> void Swap(int array[], int i, int j){ int t = array[i]; array[i] = array[j]; array[j] = t; } //Hover法 //快排 ...原创 2019-05-14 10:31:03 · 820 阅读 · 0 评论 -
归并排序的递归与非递归
归并排序:(二路归并)处理大数据很有用把整个数组平均分成左右两部分 分治算法 先对左边的区间进行归并排序 右边的区间进行归并排序 直到 Size==0||size==1 3.合并两个有序数组时间复杂度O(n*logn)空间复杂度o (n)稳定性:稳定...原创 2019-05-14 20:52:53 · 154 阅读 · 0 评论 -
用栈实现非递归快排
#include<stack>int Partition_2(int array[], int low, int high){ int begin = low;//从基准值位置开始 int end = high; int pivot = array[low];// begin是坑的下标 //(begin,end)的区间是没有被比较过的数据...原创 2019-05-14 20:55:23 · 811 阅读 · 0 评论 -
直接插入排序
#pragma once#include<stdio.h>//直接插入排序1void InsertSort1(int array[], int size){ for (int i = 0; i < size; i++){ int key=array[i]; int j; //[i-1,0] for (...原创 2019-05-10 14:46:00 · 60 阅读 · 0 评论 -
希尔排序-----快排的进化
分析:分组插排 //时间复杂度:最好:O(n)平均:O(n^1.3~1.4)最差:O(n^2)空间复杂度:O(1)稳定性:不稳定*/#pragma once#include<stdio.h>void InsertSortWithGap(int array[], int size, int gap){ for (int i = 0; i < ...原创 2019-05-10 14:56:41 · 110 阅读 · 0 评论 -
直接选择排序
时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定#pragma once#include<stdio.h>void Swap(int array[], int i, int j){ int t = array[i]; array[i] = array[j]; array[j] = t;}void SelectSort(int arr...原创 2019-05-10 15:17:22 · 66 阅读 · 0 评论 -
堆排序--------完全二叉树的排序
#pragma once#include<stdio.h>void Swap(int array[], int i, int j){ int t = array[i]; array[i] = array[j]; array[j] = t;}void PrintArray(int array[], int size){ for (int i =...原创 2019-05-10 16:08:54 · 91 阅读 · 0 评论 -
冒泡排序
#pragma once#include<stdio.h>void Swap(int array[], int i, int j){ int t = array[i]; array[i] = array[j]; array[j] = t;}void BubbleSort(int array[], int size){ int isSorted...原创 2019-05-13 14:58:13 · 63 阅读 · 0 评论 -
判断一个链表是否回文--JAVA
判断一个链表是否回文public class Nowcoder { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public clas...原创 2019-05-18 16:45:13 · 322 阅读 · 0 评论 -
“回文串”
.“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥 有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字 符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使 新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如: ...原创 2019-07-26 17:19:58 · 372 阅读 · 0 评论 -
判断一颗二叉树是否为完全二叉树
bool isComplete(Node *root){ std::queue<Node *> q; q.push(root); while (true){ Node *front = q.front(); q.pop(); //A B C D NULL E NULL NULL NULL if ...原创 2019-05-03 20:39:26 · 1225 阅读 · 0 评论 -
层序遍历
思路: 层序遍历 A.启动 B.拉下线循环到队列彻底为空 1.把队首元素取出 2....原创 2019-05-03 18:41:38 · 170 阅读 · 0 评论 -
判断两棵二叉树是否相同
#pragma once#include<stdio.h>#include<assert.h>typedef struct Node{ int value; struct Node *left; struct Node *right;}Node;bool isSameTree(Node *p1, Node *p2){ if (p...原创 2019-05-02 17:45:56 · 375 阅读 · 0 评论 -
复杂链表的深度拷贝(给定一个链表,每个节点包涵一个额外增加的随机指针,返回这个链表的深度拷贝)
RNode.h#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef struct RNode { int v; struct RNode* ramdom; structRNode * next;}RNode;RNode.c#i...原创 2019-04-29 20:56:25 · 192 阅读 · 0 评论 -
删除列表中所有出现v的位置
typedef int SListDataType;//链表中的一个节点typedef struct Node{ SListDataType value; //值 struct Node *next; //下一个节点的地址 }Node;//单链表typedef struct SList{ Node *first;// *head 第一个...原创 2019-04-29 21:37:46 · 181 阅读 · 0 评论 -
合并两个有序列表
typedef int SListDataType;//链表中的一个节点typedef struct Node{ SListDataType value; //值 struct Node *next; //下一个节点的地址 }Node;//单链表typedef struct SList{ Node *first;// *head 第一个...原创 2019-04-29 21:33:56 · 1709 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个节点
typedef int SListDataType;//链表中的一个节点typedef struct Node{ SListDataType value; //值 struct Node *next; //下一个节点的地址 }Node;//单链表typedef struct SList{ Node *first;// *head 第一个...原创 2019-04-29 21:31:00 · 480 阅读 · 0 评论 -
在一个排序的列表中,存在重复的节点,删除该链表中重复的节点,重复的节点不保存,返回链表头指针
typedef int SListDataType;//链表中的一个节点typedef struct Node{SListDataType value; //值struct Node *next; //下一个节点的地址}Node;//单链表typedef struct SList{Node *first;// *head 第一个节点的地址} SLis...原创 2019-04-29 21:26:48 · 405 阅读 · 0 评论 -
返回链表的中间节点
typedef struct Node{ SListDataType value; //值 struct Node *next; //下一个节点的地址 }Node;//单链表typedef struct SList{ Node *first;// *head 第一个节点的地址} SList;用快慢指针SList* MiddleLi...原创 2019-04-29 21:17:10 · 379 阅读 · 0 评论 -
以给定值x为基准将链表分割成两部分(C和JAVA )
以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。C写法:SList* PartitionLists(SList *head, int v){ assert(head != NULL); Node* result1 = ...原创 2019-04-29 21:15:08 · 996 阅读 · 0 评论 -
反转一个单链表
题目描述:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLstruct ListNode {* int val;* struct ListNode *next;* };struct ListNode* reverseList(struct List...原创 2019-04-29 21:07:45 · 176 阅读 · 0 评论 -
顺序表的增删改查及测试
线性表:必须有顺序:数据之间有关系1.顺序表:静态顺序表顺序表的容量是在编译期间(静态期间)决定写死在代码里的Typedef struct SeqList{Int array[100];//容量是100Int size;//当前顺序表里已经有的数据个数//顺便表示了顺序表最后插入的数据下标} SeqList...原创 2019-04-25 18:52:34 · 536 阅读 · 0 评论 -
两个二叉树是否为镜像(对称)二叉树
#pragma once#include<stdio.h>#include<assert.h>typedef struct Node{ int value; struct Node *left; struct Node *right;}Node;重点理解:让p1的左子树和p2的右子树相同,p1的右子树和p2的左子树相同即可 ...原创 2019-05-02 18:03:26 · 487 阅读 · 0 评论 -
一个二叉树是否为镜像(对称)
#pragma once#include<stdio.h>#include<assert.h>typedef struct Node{ int value; struct Node *left; struct Node *right;}Node;重点只要考虑:让左子树等于右子树即可bool isMirror(Node *p1, Nod...原创 2019-05-02 18:16:49 · 173 阅读 · 0 评论 -
另一个树的子树
题目要求:给定两个非空二叉树s和t,检查s中是否包含和t具有相同结构和节点值的子树。s的一个子树包括s的一个节点和这个节点的所有子孙,s也可看做它自身的一棵子树bool isSame(Node *p1, Node *p2){ if (p1 == NULL&&p2 == NULL){ return true; } if (p1 == NU...原创 2019-05-02 19:37:50 · 70 阅读 · 0 评论 -
判断一颗二叉树是否是平衡二叉树
左子树是平衡二叉树&&右子树是平衡二叉树&&左右子树高度差不超过1bool isBalanced(Node *root){ if (root == NULL){ return true; } if (isBalanced(root->left) == false){ return false; ...原创 2019-05-02 19:56:13 · 98 阅读 · 0 评论 -
如何构建一棵二叉树(已知前序顺序,带#号)
伪代码:分析 二叉树顺序为:ABDF####C#E#G 利用前序来做二叉树的根节点 CreateTree(char preorder[], int size){用掉的数目//根Node *root=malloc(preorder[0])//左子树 &preorder[1],size-1根,...原创 2019-05-03 16:07:17 · 1844 阅读 · 0 评论 -
如何利用中序和前序构建一棵二叉树
结构体:typedef struct Node{ int value; struct Node *left; struct Node *right;}Node;int Find(char array[], int size, char v){ for (int i = 0; i < size; i++){ if (arr...原创 2019-05-03 17:49:28 · 639 阅读 · 1 评论 -
如何利用中序和后序构建一棵二叉树
结构体:typedef struct Node{ int value; struct Node *left; struct Node *right;}Node;int Find(char array[], int size, char v){//找的始终是中序 for (int i = 0; i < size; i++){ i...原创 2019-05-03 18:05:56 · 1648 阅读 · 0 评论 -
背包问题
package Chat;//java背包解法:public class Test { /** * @param m: An integer m denotes the size of a backpack * @param A: Given n items with size A[i] * @param V: Given n items with va...原创 2019-07-27 11:07:06 · 122 阅读 · 0 评论