数据结构 考研
哇哈哈bless
这个作者很懒,什么都没留下…
展开
-
什么是二叉搜索树?二叉搜索树的实现、插入、查找(C语言版) 超详细!
名字挺多二叉查找树(binary search tree)二叉搜索树(binary search tree)有序二叉树(ordered binary tree)排序二叉树(sorted binary tree)是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于或等于它的根节点的值;任意节点的左、右子树也分别为二叉查找树;废话少说 上代码!#include<stdio.h&原创 2020-08-18 19:40:20 · 294 阅读 · 0 评论 -
什么是堆?堆的实现以及堆排序(C语言版) 超详细!
堆,英语heap,是计算机科学中的一种特别的完全二叉树。来源:堆始于J. W. J. Williams在1964年发表的堆排序(heap sort),当时他提出了二叉堆树作为此算法的数据结构。性质:任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。若母节点的值恒小于等于子节点的值,此堆称为最小堆/小顶堆(min heap)若母节点的值恒大于等于子节点的值,此堆称为最大堆/大顶堆原创 2020-08-16 19:55:08 · 983 阅读 · 0 评论 -
实现哈夫曼树及哈夫曼编码(C语言版,利用小顶堆) 超详细!
#include<stdio.h>#include<stdlib.h>#define bug printf("***************************\n")#define maxn 100000 + 7//定义哈夫曼树的结点typedef struct LinkNode{ int data; struct LinkNode* lchild; struct LinkNode* rchild;}LinkNode;int len;int st_p原创 2020-08-15 20:44:14 · 828 阅读 · 1 评论 -
什么是线索二叉树?
定义:一个二叉树通过如下的方法“穿起来”:所有原本为空的右(孩子)指针改为指向该节点在中序序列中的后继,所有原本为空的左(孩子)指针改为指向该节点的中序序列的前驱。线索二叉树能线性地遍历二叉树,从而比递归的中序遍历更快。使用线索二叉树也能够方便的找到一个节点的父节点,这比显式地使用父亲节点指针或者栈效率更高。这在栈空间有限,或者无法使用存储父节点的栈时很有作用(对于通过深度优先搜索来查找父节点而言)。考虑这样的例子:一个节点k有一个右孩子r,那么r的左指针可能是指向一个孩子节点,或是一个指回k的线索。原创 2020-08-09 23:25:04 · 12673 阅读 · 0 评论 -
不带头结点的线索二叉树(C语言版) 线索化、遍历操作 超详细!
#include<stdio.h>#include<malloc.h>// 线索二叉树的存储结构typedef struct thread_node{ char data; struct thread_node* lchild;//线索 struct thread_node* rchild; int ltag; int rtag;}thread_node, *thread_tree;int cur;//现在指向的结点char原创 2020-08-09 23:14:37 · 818 阅读 · 0 评论 -
带头结点的线索二叉树(C语言版)线索化、遍历操作 超详细!
#include<stdio.h>#include<malloc.h>// 线索二叉树的存储结构typedef struct thread_node{ char data; struct thread_node* lchild;//线索 struct thread_node* rchild; int ltag; int rtag;}thread_node, *thread_tree;int current;//现在指向的结点c原创 2020-08-09 23:07:34 · 1214 阅读 · 0 评论 -
链式二叉树的实现以及常用操作(C语言) 超详细!
#include<stdio.h>#include <stdlib.h>typedef struct bin_node//结点{ char data;//数据域 struct bin_node* right;//右子树 struct bin_node* left;//左子树}node;//取小名int cur;//现在指向的结点char str[1000];//数组存放遍历字符串node* create_tree()//创建树{原创 2020-08-03 17:08:41 · 648 阅读 · 1 评论 -
二叉树的创建与三种遍历(C++版)
#include<bits/stdc++.h>using namespace std;int cur;string str;typedef struct bin_node{ char data; bin_node* right; bin_node* left;}node;node* create_tree(){ cur++; if(str[cur] == '#') { return NULL; } node* root = (node*)malloc(s原创 2020-07-27 20:14:14 · 286 阅读 · 0 评论 -
队列——顺序循环队列的定义以及基本操作 超详细!
#include<stdio.h>#include<math.h>#define maxsize 50//结构体定义typedef struct{ int data[maxsize]; int front, rear;}squeue;//初始化顺序队列(创)void initialize_queue(squeue* q){ q->front = q->rear = 0;}//入队(增)void in_queue(squ原创 2020-07-25 20:48:02 · 1358 阅读 · 0 评论 -
队列——链式存储队列的定义以及基本操作 超详细!
#include<stdio.h>#include<stdlib.h>//带头结点的链队//结点的结构体定义typedef struct linknode{ int data; struct linknode* next;}linknode;//链队的结构体定义typedef struct{ linknode* front; linknode* rear;}linkqueue;//初始化(创)void initialize原创 2020-07-25 20:46:41 · 1015 阅读 · 0 评论 -
栈——链栈(不带头结点)的定义以及基本操作 超详细!
#include<stdio.h>#include<stdlib.h>#include<stdbool.h>//结构体定义typedef struct linknode{ int data; struct linknode* next;}linknode, *linkstack;//初始化链栈void initialize_stack(linkstack* s){ (*s) = NULL;}//进栈(增)void pu原创 2020-07-23 17:18:45 · 6220 阅读 · 10 评论 -
栈——顺序栈的定义以及基本操作 超详细!
#include<stdio.h>#include<stdbool.h>//顺序存储,用静态数组实现,需要记录栈顶指针//定义、初始化(创)、增(进栈)、删(出栈)、判空、查(读栈顶元素)、销#define maxsize 50//栈中元素的最大个数//顺序表结构定义struct sqstack{ int data[maxsize]; int top;//数组下标,由于是顺序存储也就相当于了指针,这个指的是栈顶指针};//初始化顺序栈void原创 2020-07-21 19:29:26 · 3102 阅读 · 0 评论 -
静态链表的定义以及基本操作 超详细!
#include <stdio.h>#include <stdlib.h>const int maxSize = 10;//静态链表最大长度struct Node{ int data; //数据域 int cur; //游标};typedef struct Node staticList;//起别名//从备用链表摘下一个结点,分配空间int malloc_list(staticList *array){ //找到备用链表的第一个原创 2020-07-14 21:39:13 · 349 阅读 · 0 评论 -
双向循环链表的定义以及基本操作 超详细!
#include<stdio.h>//头文件#include<stdlib.h>//头文件 malloc函数struct node//结点结构体定义{ struct node* prior;//前指针 指向前一个节点 struct node* next;//后指针 指向后一个节点 int data;};typedef struct node node;//为"struct node"起别名node 指结点typedef struct node .原创 2020-06-28 16:40:26 · 1565 阅读 · 0 评论 -
单链表的定义以及基本操作 超详细!
#include<stdio.h>#include<stdlib.h>//单链表结点的定义typedef struct lnode{ int data;//数据域 struct lnode* next; //指向后继结点的指针}node;typedef node linklist;//求单链表的长度int len_list(linklist L){ node* p; p = &L; int len=0; w原创 2020-06-26 16:17:21 · 1083 阅读 · 0 评论 -
动态分配内存的顺序表的定义及基本操作(C语言版) 超详细!
//动态分配内存空间的顺序表的创建、初始化、//后插、任意位置插入、删除指定位置元素、查找某个元素的位置//增加顺序表的空间、打印顺序表#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100//初始化分配的容量//定义顺序表typedef struct sqlist{ int maxsize ;//最大容量 int length;//当前顺序表的元素个数 int* data;//指向顺序表原创 2020-06-17 19:18:19 · 1316 阅读 · 0 评论 -
静态分配内存的顺序表的定义及基本操作(C语言版) 超详细!!
#include<stdio.h>#define maxsize 100struct sqlist{//采用固定长度的静态顺序表 int length; int data[maxsize];};//struct sqlist list;////这样就定义好了一个顺序表,名字为list//struct sqlist *plist;////这样就定义好了一个可以指向顺序表的指针,名字为plist//顺序表的初始化void initialize_list(原创 2020-06-16 21:57:19 · 599 阅读 · 0 评论 -
线性表的定义 超详细!
#include<stdio.h>#define maxsize 100//设置最大线性表的数据元素//线性表是指的逻辑结构,各个元素类型相同且元素个数是有限的//1.1线性表之顺序表的结构体定义typedef struct{ int data[maxsize]; //存放顺序表元素的数组 存放数据为整型 int length; //当前顺序表是否的长度}sqlist;//1.2线性表之顺序表的一般定义,直接利用数组int A[maxsize]; //表原创 2020-06-16 17:54:30 · 3548 阅读 · 0 评论