
数据结构
文章平均质量分 78
BUS375
不积跬步无以至千里,不积小流无以成江海!
展开
-
堆排序算法
堆排序算法原创 2016-10-06 21:44:17 · 497 阅读 · 0 评论 -
线性表顺序存储API
seqlist.h#ifndef __MY_SEQLIST_H__#define __MY_SEQLIST_H__typedef void SeqList;typedef void SeqListNode;typedef unsigned int DataType;SeqList* SeqList_Create(int capacity);void SeqList_Des原创 2016-10-02 20:34:14 · 350 阅读 · 0 评论 -
线性表链式存储API
linklist.h#ifndef __MYLINKLIST_H__#define __MYLINKLIST_H__//传统链表 数据和指针在一个节点//现代链表 把指针独立出来,做成节点 在包含数据的节点中包含这个独立节点typedef void LinkList;typedef struct _tag_LinkListNode//被大千世界包含{ struct _tag_L原创 2016-10-02 20:35:47 · 327 阅读 · 0 评论 -
双向链表API
dlinklist.h#ifndef __MYDLinkList_H__#define __MYDLinkList_H__//传统链表 数据和指针在一个节点//现代链表 把指针独立出来,做成节点 在包含数据的节点中包含这个独立节点typedef void DLinkList;typedef struct _tag_DLinkListNode//被大千世界包含{ struct _原创 2016-10-03 12:50:04 · 761 阅读 · 0 评论 -
二叉树的中序非递归遍历c++版
#include #include using namespace std;//第一种表示方法 :二叉链表示法typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;} BiTNode,* BITree;//中序递归遍历void inOrder(BiTNode*root){ if (root==N原创 2016-10-05 10:34:57 · 503 阅读 · 0 评论 -
二叉树的中序非递归遍历c语言版
由于c语言没有c++的STL库,我们无法借助c++的stack库实现二叉树的非递归遍历,但是,我们完全可以自己打造一个c语言版的stack库。本篇博文就是借助我们之前在栈的链式存储这篇博文实现的程序。当然,你也可以把它编译成动态库dll(可以参考)放到自己的工程项目中。#define _CRT_SECURE_NO_WARNINGS#include #include#inclu原创 2016-10-06 07:56:54 · 7010 阅读 · 1 评论 -
二叉树的创建与销毁
一、根据先序遍历和中序遍历创建二叉树1、根据中序遍历的结果能确定一棵树吗?中序遍历:结果为:“12345”,这个“12345”能确定一棵树吗?请思考,会有多少种形状。2、如何才能确定一棵树?结论: 通过中序遍历和先序遍历可以确定一个树通过中序遍历和后续遍历可以确定一个树通过先序遍历和后序遍历确定不了一个树。单独先序遍历:能求解根,但不能求解左子原创 2016-10-05 21:01:54 · 10249 阅读 · 2 评论 -
根据先序序列和中序序列创建二叉树
思考:如何才能确定一棵树?结论: 通过中序遍历和先序遍历可以确定一个树 通过中序遍历和后续遍历可以确定一个树 通过先序遍历和后序遍历确定不了一个树。单独先序遍历:能求解根,但不能求解左子树什么时候结束、右子树什么时候开始。根据先序和中序结果画树算法1、通过先序遍历找到根结点A,再通过A在中序遍历的原创 2016-10-06 19:12:21 · 38883 阅读 · 10 评论 -
普通查找算法和二分查找算法
(1) 普通的数据查找 设想有一个1M的数据,我们如何在里面找到我们想要的那个数据。此时数据本身没有特征,所以我们需要的那个数据可能出现在数组的各个位置,可能在数据的开头位置,也可能在数据的结束位置。这种性质要求我们必须对数据进行遍历之后才能获取到对应的数据。<?phpfunction find($arr,$value){ $len=count($arr); if ($len<原创 2016-09-08 15:32:23 · 391 阅读 · 0 评论 -
选择排序算法
简单选择排序是一种排序算法。选择排序思想:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录列末尾,直到全部排序结束。简单排序处理流程:(1)待排序的记录中选出关键字最小的记录(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换。(3)从余下的N-1个元素中,找出关键字最小的元素,重复(1)(2),直到排序结束。如图所示,每趟排序将当前第i小的元原创 2016-09-08 08:44:12 · 367 阅读 · 0 评论 -
归并排序算法
归并排序是建立在归并操作上的一种有效的排序算法。该算法是分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将两个有序数列合并。这个非常简单,只要从比较两个数列的第一个数,谁小就先取谁,然后在对应数列中删除这个数。再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中void MemeryArray(in原创 2016-09-09 16:01:41 · 228 阅读 · 0 评论 -
插入排序算法
插入排序是排序的一种。插入排序的基本思想:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的原创 2016-09-08 10:41:44 · 481 阅读 · 0 评论 -
二叉排序树
二叉排序树(Binary Sort Tree,简称BST),又称二叉查找树,是红黑树、AVL树等的基础。它或是一棵空树,或者是具有下列性质的一棵二叉树:1、若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;2、若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;3、它的左右子树也分别为二叉排序树。下面的一棵树即为二叉排序树:原创 2016-10-07 16:18:34 · 337 阅读 · 0 评论 -
希尔排序算法
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是不稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列原创 2016-10-07 15:40:30 · 280 阅读 · 0 评论 -
c++模板类实现线性表顺序存储
SeqList.h#pragma oncetemplateclass SeqList{public: SeqList(void); SeqList(int capacity); ~SeqList(void); int getLength(); int getCapacity(); int insert(T &t,int pos); int get(int pos,原创 2016-10-05 11:49:13 · 665 阅读 · 0 评论 -
循环链表API
circlelist.h#ifndef __MYCIRCLELIST_H__#define __MYCIRCLELIST_H__//传统链表 数据和指针在一个节点//现代链表 把指针独立出来,做成节点 在包含数据的节点中包含这个独立节点typedef void CircleList;typedef struct _tag_CircleListNode//被大千世界包含{ str原创 2016-10-02 20:30:33 · 852 阅读 · 0 评论 -
二叉树编程实践
二叉树编程实践()原创 2016-10-04 10:39:51 · 355 阅读 · 0 评论 -
二叉树的遍历本质剖析
#define _CRT_SECURE_NO_WARNINGS#include #include#include /*typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;};*///第一种表示方法 :二叉链表示法struct BiTNode{ int data; struct BiTNod原创 2016-10-04 16:01:36 · 806 阅读 · 0 评论 -
空间换时间
问题: 在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。 设计一个算法,找出出现次数最多的数字。方法1: 排序,然后找出出现次数最多的数字。时间复杂度为O(n2)方法2: 空间换时间,时间复杂度为O(n)方法2代码:#includeusing namespace std;int findma原创 2016-09-08 17:13:48 · 340 阅读 · 0 评论 -
4张GIF图帮助你理解二叉查找树算法
二叉查找树(Binary Search Tree),也称二叉搜索树,是指一棵空树或者具有下列性质的二叉树:任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点。二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)。二叉原创 2016-10-09 20:10:51 · 1483 阅读 · 0 评论 -
数据存储结构---顺序 链式 索引 散列
存储结构分四类:顺序存储、链接存储、索引存储和散列存储。顺序结构和链接结构适用在内存结构中。索引结构和散列结构适用在外存与内存交互结构。顺序存储:在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。特点:1、随机存取表中元素。2、插入和删除操作需要移动元素。链接存储:在计算机中用一组任意的存储单元存储线性表的数据元素(这原创 2016-09-11 09:49:22 · 5592 阅读 · 0 评论 -
栈的应用案例1:就近匹配
应用1:就近匹配 几乎所有的编译器都具有检测括号是否匹配的能力如何实现编译器中的符号成对检测?char *p = "#include int main() { int a[4][4]; int (*p)[4]; p = a[0]; return 0";算法思路:1.从第一个字符开始扫描2.当遇见普通字符时忽略,3.当遇见左符号时压入栈中4.当遇见右符号时从原创 2016-10-03 16:44:51 · 359 阅读 · 0 评论 -
快速排序算法
<?php//快速排序header("content-type:text/html;charset=utf-8");function quick_sort($arr,$left,$right){ if ($left>=$right) { //var_dump($arr); return ; } $i = $left;原创 2016-09-08 14:49:04 · 214 阅读 · 0 评论 -
冒泡排序算法
冒泡排序是一种比较简单的排序算法。冒泡排序的思想:冒泡排序就是比较是相邻的两个元素比较,把小的元素往前调或者把大的元素往后调。如果前一个元素比后一个大就交换元素之间的位置。所以冒泡排序是一种稳定排序算法过程:1.比较相邻的元素。如果前一个元素比后一个元素大,就交换他们两个。2.对每一对相邻元素作做同样的工作,从开始第一对到结尾的最后一对两两比较。在这一点,最后的元素会是最大原创 2016-09-08 11:11:38 · 339 阅读 · 0 评论 -
栈的应用案例2:中缀表达式转后缀表达式
栈的应用:中缀表达式转后缀表达式计算机的本质工作就是做数学运算,那计算机可以读入字符串“9 + (3 - 1) * 5 + 8 / 2”并计算值吗?后缀表达式 ==?符合计算机运算波兰科学家在20世纪50年代提出了一种将运算符放在数字后面的后缀表达式对应的,我们习惯的数学表达式叫做中缀表达式===》符合人类思考习惯实例:5 + 4=> 5 4 + 1 +原创 2016-10-03 21:41:18 · 565 阅读 · 0 评论 -
树的基本概念
树的基本概念原创 2016-10-04 10:37:35 · 300 阅读 · 0 评论 -
二叉树基本概念及性质
二叉树基本概念及性质原创 2016-10-04 10:38:33 · 895 阅读 · 0 评论 -
树的存储结构
二叉链表法三叉链表法双亲链表线索表示法原创 2016-10-04 10:55:44 · 309 阅读 · 0 评论 -
队列的顺序存储API
队列是一种特殊的线性表,队列是一种先进先出(FIFO)队列。仅在线性表的两端进行操作,一头插入数据(队尾),一头去除数据(队头),不允许在中间部位进行插入删除操作。队列是一种特殊的线性表,可以用线性表的顺序存储和链式存储模拟队列的顺序存储和链式存储。首先,我们先模拟队列的顺序存储。用顺序表(线性表的顺序存储)来模拟队列的顺序存储,需要限制线性表的操作。队列插入元素选用线性表原创 2016-10-04 09:41:14 · 354 阅读 · 0 评论 -
队列的链式存储API
队列是一种特殊的线性表,队列是一种先进先出(FIFO)队列。仅在线性表的两端进行操作,一头插入数据(队尾),一头去除数据(队头),不允许在中间部位进行插入删除操作。队列是一种特殊的线性表,可以用线性表的顺序存储和链式存储模拟队列的顺序存储和链式存储。首先,我们先模拟队列的链式存储。用链表(线性表的链式存储)来模拟队列的顺序存储,需要限链表的操作。入队列相当于从链表的尾部插入,出队列相当于从原创 2016-10-04 09:35:26 · 330 阅读 · 0 评论 -
栈的链式存储API
栈,首先是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表而已。它的特殊之处在于限制了线性表的插入和删除位置,它始终在栈顶进行,这就使得栈底是固定的,最先入栈的元素最后才能出栈。那么,我们根据栈的定义完全可以选用线性表进行模拟。我们知道线性表的实现由两种方式,即线性表顺序存储(顺序表)和线性表链式存储(链表)。在这里只能选用线性表的链式存储实现方式来模拟栈的链式原创 2016-10-03 16:21:20 · 635 阅读 · 0 评论 -
栈的顺序存储API
栈,首先是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表而已。它的特殊之处在于限制了线性表的插入和删除位置,它始终在栈顶进行,这就使得栈底是固定的,最先入栈的元素最后才能出栈。那么,我们根据栈的定义完全可以选用线性表进行模拟,只不过我们只能选择尾插法插入数据(相当于最最先入栈的元素排在栈底,以此类推),获取数据我们应该从线性表的尾部开始获取或弹出(相当于最后入原创 2016-10-03 14:26:40 · 293 阅读 · 0 评论 -
c++模板类实现线性表链式存储
对比c语言实现线性表的链式存储,分析不同之处!LinkList.h#pragma once//在插入元素时,模板类中应该把每个T保存下来 //模板类中应该能后 分配节点 缓存节点 //怎么样缓存===> 做链表templatestruct Node { T t; Node *next;};template class LinkList{public: Lin原创 2016-10-08 09:12:50 · 685 阅读 · 0 评论