
数据结构
文章平均质量分 86
Dean_Deng
这个作者很懒,什么都没留下…
展开
-
数据结构队列(链式实现)
代码实现:#include #include typedef int DataType;typedef struct qnode{ DataType data; struct qnode *next;}LQNode;typedef struct{ LQNode *front; LQNode *rear;}LQueue;转载 2015-03-15 18:40:35 · 578 阅读 · 0 评论 -
希尔排序
希尔排序是在插入排序的基础上进行的。主要思想是将排序的元素按照一定步长进行分组,对每组中的元素按步长进行插入排序,进行完第一次各组排序后的结果再比上次小的步长,再分组,再各组逐次排序,再得到排序结果..., 直到这个步长变为1的时候,其实就是真正的插入排序。这次完全按照插入排序算法对所有元素排序。得到结果后。整个排序结束。先是分组12个元素,元素个数/2=6,所以第一次分组步长为6,分得6转载 2015-04-04 19:37:12 · 631 阅读 · 0 评论 -
二分查找
二分查找有个前提,是待查找的序列或数组必须是一个有序的的序列或数组,否则二分查找算法就毫无意义,或者说根本就没法查了。(如果别人给你一个无序的数组,就让你用二分查找算法实现一下查找,千万别上来抄起笔傻兮兮的写代码,这是一面试过程的陷进,你的先用你学过的排序算法,对别人给你的无序数组从小到大排个序,在用二分查找去找)二分查找的思想:在一个有序的数组或序列中先找出数组的中间元素和待查找元素转载 2015-04-11 20:43:04 · 613 阅读 · 0 评论 -
有序线性表逆序代码
#include #define MaxLen 50typedef int elemtype;typedef elemtype sqlist[MaxLen];int create (sqlist A){ int i,n; printf("创建一个顺序表\n"); printf("输入元素个数:"); scanf("%d", &n);转载 2015-04-22 17:09:44 · 2876 阅读 · 0 评论 -
冒泡排序
#include void PrintArray(int a[], int arr_len){ int i; for(i=0;i { printf("%d ",a[i]); }}void BubbleSort(int a[], int arr_len){ int i,j,temp; for(i转载 2015-04-05 23:24:27 · 600 阅读 · 0 评论 -
快速排序代码实现
快速排序代码实现:#include void PrintArray(int a[], int arr_len){ int i; for(i=1;i { printf("%d ",a[i]); } printf("\n");}void swap(int a[], int low, int high){转载 2015-04-09 08:37:22 · 618 阅读 · 0 评论 -
快速排序一轮的代码实现
#include #include void PrintArray(int a[], int arr_len){ int i; for(i=1;i { printf("%d ",a[i]); } printf("\n");}void swap(int a[], int low, int high){转载 2015-04-08 23:22:36 · 1090 阅读 · 1 评论 -
已知两种遍历序列求原始二叉树
已知两种遍历序列求原始二叉树需要明确的前提条件通过先序和中序可以求出原始二叉树通过中序和后序可以求出原始二叉树但是通过先序和后序无法还原出二叉树换种说法:只有通过先序中序或者后序中序才可以确定一个二叉树先来看一个例子,已知先序遍历序列和中序遍历序列求后序遍历: 先序:ABCDEFGH 中序:BDCEAFHG 求后序: 分析:要求后序遍历序列,必须求出原始二叉树 先看先序序列A第转载 2015-07-25 09:18:38 · 10631 阅读 · 0 评论 -
已知中序遍历序列和后序遍历序列,求先序遍历
通过中序遍历和后序遍历求先序中序:BDCEAFHG后序:DECBHGFA求先序遍历结果:先求原始二叉树 后序遍历中最后出现的是根,所以A是整棵树的根,在结合中序遍历来看 BDCE是A的左子树,而FHG是A的右子树,所以我们就有了下面的图: 而BDCE序列中谁是整个序列根,还得看后序谁最后出现,答案是B 此时再看中序中根B左端没有左子树,右端有DCE,所以DCE是B的右子树 我们转载 2015-07-26 10:22:41 · 11835 阅读 · 5 评论 -
快速排序代码实现
快速排序代码实现快速排序代码:#include <stdio.h>void QuickSort(int * a, int low, int high);int FindPos(int * a, int low, int high);int main(void){ int a[6] = {2, 1, 0, 5, 4, 3}; int i; QuickSort(a, 0, 5转载 2015-08-23 20:17:44 · 677 阅读 · 0 评论 -
堆排序算法代码实现
对排序算法的核心思想是:把一个数组按照完全二叉树创建好最大堆以后,拿堆顶元素和最后一个元素(堆完全二叉树顺序存储(是个数组)\的最后一个元素)交换以后,对于这个新的数组,除去最后面那个最大的元素(原先的堆顶元素)的序列再次调整成最大堆。如此反复交换最大堆堆顶元素,调整剩余子序列到最大堆。直到最后子序列就剩下一个元素的时候,排序也就完成了。我们就得到了这个数组从小到大的排列结果。转载 2015-04-02 23:04:59 · 1847 阅读 · 0 评论 -
排序算法直接插入排序
直接插入排序算法类似玩扑克时的按从小到大整理扑克一样,如图:我们手中依次从左到右拿着64, 5, 7, 89, 6,24,初始将[64]看作已经排好序位于第一个位置的卡片,用紧挨着的5与他比较,5比64小,挪到64左侧,得到第一次排序结果[5 64] 7 89 6 24第二次排序前将[5 64]看作已经排好序的,7跟他们两个逐一比较,7挪到64之前,5之后得转载 2015-03-24 21:18:32 · 817 阅读 · 0 评论 -
递归算法
还记得当时老师说递归算法的关键是:①归纳出一个正确的数学公式②要有一个出口比如这个求阶乘的递推的例子数学公式n!=n*(n-1)!//有点像高中数学中构造数列公式一样,把n!和(n-1)!看成一个抽象的函数则有f(n) = n*f(n-1)而这个出口就是n为0的时候阶乘的值为1,这时候需要return 1实现代码:#include long int Fact(i转载 2015-03-20 22:44:50 · 428 阅读 · 0 评论 -
数据结构栈(链式实现)
代码实现:#include #include typedef int DataType;typedef struct snode{ DataType data; struct snode *next;}LSNode;/*初始化带头结点的链式堆栈*/void StackInitiate(LSNode *head){ if((head转载 2015-03-15 18:28:43 · 702 阅读 · 0 评论 -
选择排序
选择排序的思想是假设第一个元素64是一开始的最小元素,找出剩余的5~24的最小的元素(5),如果该元素(5)比64还小,就交换64和该元素(5)就得到了第一次排序结果紧接着再看64~24的元素,假设64是最小的,找出7~24中最小的元素(6),如果该元素(6)比64还小,就交换该元素(6)和64,就得到了第二次排序结果。紧接着再对7~89的元素排序,假设元素7是最小的,找出89~24中最小转载 2015-03-27 22:41:04 · 944 阅读 · 0 评论 -
二叉树
二叉树的定义:二叉树是n(n>=0)个有限结点构成的集合。n=0的树称为空二叉树;n>0的二叉树由一个根结点和两个互不相交的、分别被称为左子树和右子树的二叉树构成。转载 2015-03-28 14:08:24 · 622 阅读 · 0 评论 -
二叉树中序遍历
访问根结点的的左子树,访问根结点和访问根结点的右子树依次记作(L, D ,R)中序遍历(LDR)算法:①遍历根结点的左子树,②访问根结点③遍历根结点的右子树对于上面的图,我们假定只有A, B, C三个结点,则中序遍历结果为:B A C 采用上节(二叉树链式存储和前序遍历)中的递归推演DB A CD转载 2015-03-22 14:49:56 · 771 阅读 · 0 评论 -
二叉树后序遍历
后序遍历(LRD):①访问后序遍历中根节点的左子树②访问后序遍历中根结点的右子树③访问根结点假设只有A,B,C(对于上图)三个结点,则后序遍历的结果:B C A 开始第一次递归推演(对于B结点):DB C A第二次递归推演(对于D结点):D B C AGD B C A第三次递归推演(对于C结点):G D B C AG D B EFC A最转载 2015-03-22 15:11:40 · 973 阅读 · 0 评论 -
普通树转换成二叉树
普通树转换为二叉树的方法是:①树中所有相同双亲结点的兄弟节点之间加一条连线②对树中不是双亲结点第一个孩子的结点,只保留新添加的该结点与左兄弟结点之间的连线,删去该结点与双亲结点之间的连线③整理所有保留和添加的的连线,使每个结点的第一个孩子结点连线位于左孩子指针位置,使每个结点的右兄弟结点连线位于右孩子指针位置:整个转换过程如下图从左到右所示转载 2015-03-22 20:15:14 · 19635 阅读 · 4 评论 -
二叉树链式存储及前序遍历
代码实现二叉树配图:#include #include typedef char DataType;typedef struct Node{ DataType data; struct Node *leftChild; struct Node *rightChild;}BiTreeNode;/*初始化创建二叉树的头结点*/voi转载 2015-03-22 12:28:07 · 1626 阅读 · 0 评论 -
堆排序创建初始堆
最终结果如图1-1(e):转载 2015-04-01 07:49:17 · 34633 阅读 · 1 评论 -
二叉树遍历的的例子
二叉树遍历代码二叉树三种遍历小例子:#include <stdio.h>#include <malloc.h>struct BTNode * CreateBTree(void);void PreTraverseBTree(struct BTNode * pT);void InTraverseBTree(struct BTNode * pT);void PostTraverseBTree(st转载 2015-08-23 11:39:21 · 2153 阅读 · 0 评论