
数据结构
文章平均质量分 64
jygqm
这个作者很懒,什么都没留下…
展开
-
数据结构之链表实现
抽象数据类型(ADT)表有顺序表和链表两种,顺序表可以通过使用数组来实现,链表则是由一系列不必在内存中相连的节点组成。每个节点均含有表元素以及指向后继节点的指针,我们称其为next指针。下面是单链表的c语言实现头文件 linklist.hstruct Node;typedef int Element;typedef struct Node *ptrToNode;//创建链表ptrToN...原创 2018-05-22 22:06:21 · 567 阅读 · 1 评论 -
几种排序算法的实现
常见排序算法的c语音实现头文件sort.h#ifndef SORT_H_#define SORT_H_typedef int ElemetType;//插入排序void insertSort(ElemetType list[],int n);//希尔排序void shellSort(ElemetType list[],int n);//堆排序void heapSo...原创 2018-07-03 01:33:02 · 627 阅读 · 0 评论 -
数据结构之不相交集
不相交集(并查集)是解决等价问题的一种有效数据结构。这种数据结构实现起来简单,每个例程只需要几行代码,而且可以使用一个简单的数组实现。 等价关系 若对于每一对元素(a,b),a,b属于集合S,aRb或为true或为false,则称在集合S上定义关系R,如果aRb是true,那么我们说a与b有关系 等价关系是满足下列三个性质的关系R: 1.(自反性)对于所有a属于S,aRa; ...原创 2018-07-09 00:13:02 · 1743 阅读 · 0 评论 -
数据结构之散列
散列是一种以常数平均时间执行插入、删除和查找的技术。理想的散列表数据结构只不过是一个包含有关键字的具有固定大小的数组。典型情况下,一个关键字就是一个带有相关值得字符串。我们把表的大小记作tableSize。每个关键字经过散列函数都会被映射到0到tableSize-1范围内。通常是保证表的大小为素数。如果不同的关键字映射到了相同的值,这时候就会产生冲突。解决冲突的方法有分离链接法和开放定址法...原创 2018-06-19 23:53:33 · 691 阅读 · 0 评论 -
数据结构之二叉搜索树
二叉搜索树又叫二叉查找树,一个重要应用是他们在查找中的使用。对于二叉搜索树要求对于每个节点X,左子树中所有节点的关键字要小于X的关键字,右子树中所有节点的关键字要大于X的关键字。所以对于二叉搜索树的中序遍历正好是各个元素从小到大的排序。代码实现头文件 "bst.h"typedef int ElementType;struct Node;typedef struct Node *ptrToNod...原创 2018-06-10 01:01:40 · 633 阅读 · 0 评论 -
数据结构之队列实现
队列是一种特殊的表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的表。进行插入操作的端称为队尾,进行删除操作的端称为队头队列的实现同栈一样,都可以通过链表和线性表实现。下面是链表实现的队列头文件queue.hstruct Node;typedef int Element;typedef struct Node *...原创 2018-06-02 00:28:09 · 1020 阅读 · 1 评论 -
数据结构之二叉平衡树
二叉平衡树(AVL树),是带有平衡条件的二叉树查找树,这个平衡条件必须要容易保持,且必须保证树的深度是O(logN).。这里的平衡条件是左右子树高度差最多差1的二查找树。如果插入一个节点后破坏了平衡条件,那么就要做一些操作去恢复AVL树, 这里的操作一般称为旋转。第一种情况是插入的节点在外面,即(左-左或右-右)、另一种是节点插在里面,即(左-右或右-左), 对于第一种情况我们采用单旋转,第二种采...原创 2018-06-16 00:22:07 · 2396 阅读 · 0 评论 -
数据结构之根据前序遍历和中序遍历构建二叉树
思路:先在前序序列找到根节点,然后根据根节点在中序序列找到左子树和右子树,这样便可采用递归去构建左、右子树上代码头文件application.hstruct Node;typedef struct Node *ptrToNode;typedef struct Node *BinaryTree;typedef int ElementType;//根据前序遍历和中序遍历构建二叉树Binar...原创 2018-06-14 00:14:12 · 1028 阅读 · 0 评论 -
数据结构之栈的实现
定义栈是限制插入和删除只能在一个位置的上进行的表(→叫做后进先出表),该位置是表的末端,叫做栈顶。对栈的基本操作是push(入栈)和pop(出栈),前者是插入元素到栈顶,后者是将栈顶元素删除栈的应用1.平衡符号:编译器检查程序的语法错误,看看一些符号是否匹配如“([])”是匹配的,而“[(])”是不匹配的2.计算后缀表达式:在输入表达式过程中,遇到操作数就入栈,遇到操作符就从栈中弹出两个操作数进行...原创 2018-05-24 23:42:09 · 12071 阅读 · 1 评论 -
中缀表达式转后缀表达式
后缀表达式又称逆波兰表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)#include <stdio.h>#include "stack.h" //点击查看栈的创建int compare(char a,char b);void centerToBack(char array[]);int ...原创 2018-05-29 00:09:04 · 769 阅读 · 0 评论 -
非递归中序遍历二叉树
我们经常会使用递归的方法去遍历一棵二叉树,这个实现起来也非常简单,但要使用非递归去遍历二叉树还是需要一些编程技巧的。我们很容易想到了使用栈去处理,下面是具体实现import java.util.Stack;public class Test { public static void main(String[] args) { TreeNode root = new TreeNod...原创 2018-09-17 22:44:40 · 3882 阅读 · 0 评论