数据结构
文章平均质量分 70
绝杀fc小飞侠
这个作者很懒,什么都没留下…
展开
-
数据结构 链式 栈 c实现
转:http://blog.chinaunix.net/uid-20698826-id-3129410.html#include #include #define OK 1#define FALSE 0#define TRUE 1#define ERROR 0typedef int Status;typedef int SElemType;//结点类型typedef s转载 2013-05-01 15:38:40 · 836 阅读 · 1 评论 -
数据结构 - 快速排序
#include //分区,通过第一个数将数组分为两个部分,返回两个部分的分界点posint partition(int a[], int low, int high){ int pos, pivotkey = a[low];//pivoktey保存第一个元素作为关键字 while (low < high) { while (low pivotkey) high--;原创 2013-05-22 16:10:45 · 803 阅读 · 0 评论 -
数据结构 - 插入排序
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。体算法描述如下:从第一个元素开始,该元原创 2013-06-13 17:34:39 · 747 阅读 · 0 评论 -
数据结构 - 希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位原始的算法实现在最坏的情况下需要进行O(n2)的比较和交换。V. Pratt的书对算法进行了少量修改,可以使得性原创 2013-06-13 18:57:40 · 1649 阅读 · 2 评论 -
数据结构 - 冒泡排序
冒泡排序(Bubble Sort,泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序对个项目需要O()的比较次数,且可以原地排序。尽管这个算法是最简单了解和实作的排序算原创 2013-06-13 22:30:57 · 964 阅读 · 1 评论 -
数据结构 - 归并排序
归并排序(Merge sort,合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并操作的过程如下:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,原创 2013-06-14 18:01:46 · 824 阅读 · 0 评论 -
coding - 求连续子数组的最大和
题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。算法一:O(n)#include int原创 2013-05-20 17:02:53 · 842 阅读 · 1 评论 -
数据结构 - 二叉排序树
#include #include typedef int ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int SearchBST(BiTree T,ElemTyp原创 2013-05-14 21:51:38 · 767 阅读 · 0 评论 -
coding - 求数组中的逆序对
题目源自《剑指offer》,给定一个数组,求数组中逆序对的个数。思路:基本的思想是从头到尾对每个数遍历一遍,时间复杂度O(n*n);书中提供的思路可提高效率,时间复杂度为n*log n。假设有数组:a b c d e f g h (这里字母代表数字),可将其分为两部分,abcd和efgh,如果已经分别求得这两部分的逆序对数n1和n2,则只需要求这两部分之间存在的逆序对数n3原创 2013-10-04 20:29:41 · 741 阅读 · 0 评论 -
时间复杂度O(n),空间复杂度O(1)的排序
貌似是个老题目,巧用下标。题目描述:有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.考虑到平时接触最多的几种排序,时间复杂度都没有O(n)的,看看题目,它也有它的特殊的地方,待排序的数组为1。。。n,可用下标处理。具体如下:void MySort(int a[], int n){原创 2013-10-24 10:44:54 · 1678 阅读 · 0 评论 -
数据结构 - 选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少原创 2013-06-13 17:05:18 · 689 阅读 · 0 评论 -
数据结构 - 堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤原创 2013-06-13 16:07:56 · 1237 阅读 · 2 评论 -
数据结构 - 平衡二叉树 AVL
部分内容源自:http://blog.csdn.net/xiewenbo/article/details/8011825 和 http://blog.csdn.net/ncepustrong/article/details/8446581总结的不错,综合一下,学习之用。一、 平衡二叉树在二叉查找树T中,若所有结点的平衡因子的绝对值均不超过1,则称T为一棵AVL树。原创 2013-05-15 17:39:12 · 1307 阅读 · 0 评论 -
struct / typedef
struct定义一个结构:struct 结构名{ 成员列表}变量名列表定义一个指向结构的指针struct 结构名 *结构指针变量名如:struct stu *pstu ;类型定义符 typedef有用户自己定义类型说明符:typedef int INTEGER ; INTEGER a , b ; 等效于 int a , b ;原创 2013-05-01 17:20:41 · 906 阅读 · 0 评论 -
数据结构 - 二叉树遍历
内容参考:http://blog.csdn.net/zbwzll2/article/details/8901994 和 http://blog.csdn.net/aoxiangzhiguanjun/article/details/8904794递归://前序遍历的算法程序 void PreOrder(BiTNode *root) { if(root==NULL)原创 2013-05-11 18:24:46 · 629 阅读 · 0 评论 -
循环队列 顺序存储 C实现
转:http://blog.csdn.net/lzf824446/article/details/6725724#include #include #define M 6 //数组长度 #define bool char //c语言中没有bool类型,自己添加的 #define true 1 #define false 0 typedef stru转载 2013-05-02 18:24:29 · 868 阅读 · 0 评论 -
队列 顺序存储
使用一组地址连续的存储单元依次存放队列中元素,同时需要两个指针front和rear分别指示队列头元素和尾元素的位置。其实front和rear也不能叫做指针,因为队列顺序存储结构定义是这么写的:#define MAXQSIZE 100 //最大队列长度typedef struct{ QElemType *base; int front; int rear;原创 2013-05-02 17:58:39 · 913 阅读 · 0 评论 -
查找给定区间内第K大/小的数
源自:http://blog.csdn.net/v_JULY_v/article/details/6452100主要解决的是一维数组中,寻找给定区间第k小(大)的数。思路:1.通常会将给定的区间的树排序,然后遍历找出目标数。#include #include using namespace std; struct node{原创 2013-05-20 16:11:30 · 1176 阅读 · 0 评论 -
数据结构 - 哈希表
源自:http://blog.csdn.net/ncepustrong/article/details/8448187一、哈希表 哈希表又称散列表。哈希表存储的基本思想是:以数据表中的每个记录的关键字k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。在此称该函数H为哈希函数或散列函数。原创 2013-05-20 23:14:19 · 1192 阅读 · 1 评论 -
数据结构-二叉树 链式 c
百度了一下,下面的比较符合个人胃口,具体出处还真忘了,学习。#include#includetypedef struct bitree{ int data; struct bitree *lchild; struct bitree *rchild;}bitreenode,*bitreelink;bitreelink creat();//构建二叉树void parent(bit原创 2013-05-09 22:06:09 · 937 阅读 · 2 评论 -
二叉树 - 建立
转:http://blog.csdn.net/qingtianweichong/article/details/8881047#include #include //typedef void * ElemType;typedef int ElemType;struct BinaryTree{ ElemType e; BinaryTree *left; BinaryTree转载 2013-05-11 18:47:41 · 644 阅读 · 0 评论 -
数据结构 - 赫夫曼树Huffman
//1.每次选取两个最小节点比较,结果添加一个节点。此时最小节点parent值不为-1,故下次循环将不会参加,相当于被删void create_huffman_tree(node *hftree,int n){ /// 建哈夫曼树 int m1, m2, x1, x2; //m1和m2分别取最小和次小的值,x1和x2对应相应的下标 for(int i=1;i这里从1到n-原创 2013-05-12 20:36:51 · 718 阅读 · 0 评论 -
数据结构 - 查找
顺序查找顺序查找适合于存储结构为顺序存储或链接存储的线性表int Sequential_Search(elemtype s[], keytype Key, int n){ int i = 0 ; while (i < n && s[i].Key != Key) i++; if (s[i].Ke原创 2013-05-13 16:16:46 · 612 阅读 · 0 评论 -
基本排序算法 - 基本知识点
了解一下,加强记忆原创 2013-12-01 17:25:51 · 962 阅读 · 1 评论