
数据结构
2号老码农了
这个作者很懒,什么都没留下…
展开
-
二叉树---判断完全二叉树
解题思路完全二叉树:一棵树按层序遍历时,如果遇到NULL时,后面没有节点,那么他便是一棵完全二叉树。否则他便不是一棵完全二叉树。解题思路:我们利用队列这一数据结构,将树的元素按层入队列(过程类似层序遍历,区别在于NULL我们也得入队)。当我们出队时,遇上了NULL,我们便对队列内的元素进行判断,如果队列中全部为空,那么他便是一颗完全二叉树。代码实现typedef char BTDataType;typedef struct BinaryTreeNode { struct BinaryTr原创 2021-05-03 14:57:06 · 376 阅读 · 0 评论 -
二叉树---求树的叶子个数
int TreeLeafSize(BTNode* root){ if (root == NULL) { return 0; } if (root->left == NULL && root->right == NULL) { return 1; } return TreeLeafSize(root->left) + TreeLeafSize(root->right);}原创 2021-05-03 09:57:08 · 269 阅读 · 0 评论 -
二叉树--求树的高度
实现思想:1.求树高时我们可以利用递归思想来求。而递归主要的思想就是要将大问题化为小问题。2.我们求树高时,可以分别求左右子树的高度然后比较左右子树的高度,返回较大的值。代码实现:int max_val(int a, int b) { return a > b ? a : b; }int BTtreeHeight(BTNode* root) { if (!root) return 0; return max_val(BTtreeHeight(root->left), BTtr原创 2021-05-03 09:46:15 · 1784 阅读 · 0 评论 -
二叉树---查找值为x的节点
如何查找思路:单边递归查找。具体方法:先对左子树递归查找。如果未找到x,则返回NULL,如果找到x,便返回x所在节点。根据返回值判断是否需要进行右递归查找操作。具体实现BTNode* CreateTreeNode(BTDataType x) { BTNode* newNode = (BTNode*)malloc(sizeof(BTNode)); newNode->left = NULL; newNode->right = NULL; newNode->val = x;原创 2021-05-02 23:22:26 · 11338 阅读 · 5 评论 -
二叉树----层序遍历
1.层序遍历层序遍历:层序遍历即逐层按顺序遍历二叉树的各个节点,故层序遍历又叫广度优先遍历.如图:广度优先遍历即按ABCDEFGH的顺序遍历2.解题思路1.这里我们利用队列先进先出的结构特点,当我们在队列中弹出一个树的节点时,我们便把树的左孩子和右孩子入到队列之中.(如果父节点的左右孩子为空时,我们便可不对其孩子进行入队列操作)2.根据上面描述,我们可以用一个while循环解决入队列与出队列操作,结束条件便是判断队列是否为空.3.代码实现我们用C语言实现时,我们得自己写一个队列的结构,该原创 2021-05-02 16:36:32 · 1970 阅读 · 1 评论 -
c语言实现三种稳定排序---插入,冒泡,归并
1.插入排序【1】基本实现:从一个数组的第二个位置起,到最后一个位置结束。让这些位置每一个都进行一遍循环。该循环操作是让从该位置上的元素起,依次与前面的位置元素进行比较,在满足某一条件下进行交换,从而达到排序的效果。【2】时间复杂度:O(N^2)//【排序1】插入排序--排升序--时间复杂度( O(N^2) )void Insert_Sort(int* arr, int n){ for (int i = 1; i < n; i++) { for (int j = i; j >.原创 2021-04-12 23:59:46 · 968 阅读 · 1 评论 -
广义表转二叉树
头文件#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define TreeDataType char //树内的数据为char,可存放字母//定义一个树结点,用于将广义表中的数据封装成树结点typedef struct Node{ TreeDataType data ; .原创 2021-04-08 17:01:18 · 1530 阅读 · 8 评论 -
二叉搜索树-c语言实现-妙用递归
二叉搜索树1.性质:所有比根节点的小的数据放入左孩子,所有比根节点大的数据放在右孩子处。代码实现:注:前序遍历二叉树[根-左-右]中序遍历二叉树[左-根-右]后序遍历二叉树[左-右-根]typedef struct Node{ int data ; struct Node* lchild ; struct Node* rchild ;}Node;typedef struct BSTree{ Node* root ; int length ;}BSTree;No原创 2021-04-07 19:43:32 · 267 阅读 · 2 评论 -
数组实现链表效果
//局部变量:未初始化内部元素默认为0int Data[10] ; //定义一个数组,存放数据int Next[10] ; //定义一个数组,存放下一个元素的下标//该函数用于实现数组链表的插入void Insert( int index , int p , int val){ Next[p] = Next[index]; //将index 后面的下标赋予 p后面的下标 ,从而达到插入的效果 Next[index] = p; //将index 后面的下标改为p.原创 2021-03-31 22:47:32 · 161 阅读 · 2 评论 -
堆的应用---堆排序
堆排序引言:实现思路:代码实现引言:一个堆的首元素往往是最大值或者最小值,因此我们可以利用这一特性实现对一组数进行排序。须注意的是:大堆可以实现一组数的升序排列,小堆则用来实现一组数的降序排列。实现思路:当我们有一个堆后(这里用小堆为例):我们可将首元素(这里即最小的元素)与最后一个元素交换并让堆的大小减一。(因为我们这里已经把堆中最小的数放在了最后的位置,我们剩下要做的便是对其余的元素排序)。因为父节点的两棵子树任然为小堆,因此对根节点进行向下调整(用向下调整算法),得到一个小堆,第二原创 2021-03-31 20:13:30 · 213 阅读 · 1 评论 -
堆排序 --- 向下调整算法
二叉堆概念:二叉堆是一种特殊的树结构,即一个父节点最多有两个子节点。且一个二叉堆一定是一个完全二叉树,即如果一个父节点有一个右孩子,则其一定有一个左孩子。二叉堆又分为大堆和小堆:(1)大堆:父节点上的数大于子节点上的数(2)小堆:父节点上的数小于子节点上的数代码实现:该段代码实现重点在雨:向下调整算法、构造堆------------------------------------------------------------------------函数申明-------------原创 2021-03-31 00:41:29 · 398 阅读 · 0 评论 -
队列----基础函数功能的实现
一.队列的特点:先进先出(FIFO)数组与链表实现的对比:1.用数组实现时,在数据出队列时需挪动整个数组 不方便2.相较而言,链表实现队列较为简便以下是用单向链表的方式实现队列二.代码运行三.代码实现1.函数声明#define QDataType int //队列组成元素为节点,故定义一个QueueNode的节点类型typedef struct QueueNode{ QDataType _data ; struct QueueNode* _next ;}QueueNode;原创 2021-03-22 23:34:57 · 1252 阅读 · 1 评论 -
栈---基本功能的实现
stack --堆(LIFO)后进先出1.运行贴图2.代码实现#define SDataType int #include<stdio.h>#include<stdlib.h>#include<assert.h>typedef struct Stack{ SDataType _top; // _top表示栈最后一个元素的位置 SDataType* _array; int _capacity;}Stack;//初始化栈void Ini原创 2021-03-22 16:17:30 · 178 阅读 · 3 评论 -
链表---双向循环链表(带头节点)
**双向带头链表相较单向链表:** 逻辑性更强,但实现更容易下面是测试该链表功能的结果的结果 :以下代码分为三部分:1.函数声明:2.函数实现:3.测试部分:注:函数实现内有对函数实现的部分分析.#include<stdio.h>#include<stdlib.h>#include<assert.h>//双向带头节点链表#define ListType int typedef struct List...原创 2021-03-20 21:09:15 · 202 阅读 · 3 评论 -
单向无头链表
#pragma once#include<stdio.h>#include<stdlib.h>typedef int SLDataType ;typedef struct SListNode{ SLDataType data; struct SListNode* next;}SListNode;//创建一个节点SListNode* BuySListNode(SLDataType x);//打印void PrintSList(SListNode* ph原创 2021-03-18 23:38:54 · 79 阅读 · 0 评论 -
顺序表
------------------------------------------------- #pragma oncetypedef int SLDataType; // 可以方便 进行更改 顺序表中 数据存放的类型#include <stdio.h>#include<stdlib.h>#include<assert.h>//用结构体定义一个顺序表 ----> 一个结构体变量 就可 表示一个顺序表typedef原创 2021-03-18 22:34:03 · 75 阅读 · 0 评论