随笔分类 -  数据结构

摘要:1 #include 2 using namespace std; 3 4 typedef struct LNode{ 5 int data; 6 LNode* next; 7 }LNode; 8 //非递归方法, 9 LNode* reverse(LNode* head)10 ... 阅读全文
posted @ 2014-09-09 16:41 枫桦宁 阅读(265) 评论(0) 推荐(0) 编辑
摘要:个人感觉堆排序还是在排序算法中比较难懂的,看了一段时间。准备把其中的思路理一理。首先,堆分为大根堆和小根堆。堆是满足下列性质的数列{r1, r2, …,rn}: 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。那么如何进行排序呢? 1. 我们要把序列构建为堆,建堆的核心就是不断的调... 阅读全文
posted @ 2014-09-07 12:50 枫桦宁 阅读(719) 评论(0) 推荐(2) 编辑
摘要:1. 概述排序算法是计算机技术中最基本的算法,许多复杂算法都会用到排序。尽管各种排序算法都已被封装成库函数供程序员使用,但了解排序算法的思想和原理,对于编写高质量的软件,显得非常重要。本文介绍了常见的排序算法,从算法思想,复杂度和使用场景等方面做了总结。2. 几个概念(1)排序稳定:如果两个数相同,... 阅读全文
posted @ 2014-08-28 11:17 枫桦宁 阅读(211) 评论(0) 推荐(0) 编辑
摘要:堆 和 栈的 区别(经典)转载一篇理解堆和栈区别的好文章此文章虽然是面向C/C++程序员写得,但是对咱们Java程序员还是很有帮助的。堆和栈的区别一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变... 阅读全文
posted @ 2014-08-27 16:28 枫桦宁 阅读(195) 评论(0) 推荐(0) 编辑
摘要:原创博文,转载请注明出处利用周六周末的时间把几种基本的排序方法用python实现了一下,废话少说,直接上代码。本文不注重基础知识的讲解,只做大致的描述,大家如果不清楚概念,自行查找资料。直接插入排序: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 1 def insert(arr): 2 l = len(arr) 3 for i in range(1,l): 4 if arr[i]=0 and arr[j]>temp:10 arr[j+1]=arr[j] #元素后移11 ... 阅读全文
posted @ 2013-12-17 15:49 枫桦宁 阅读(1417) 评论(4) 推荐(1) 编辑
摘要:原创博文,转载请注明出处。队列也是一种线性表,但是只允许在表的一端进行插入,而在表的另一端进行删除。其操作特性是先进先出。队列常应用在在层次遍历中(如对二叉树的遍历),计算机系统中,也常用来解决如主机与外部设备之间速度不匹配的问题,和由多用户引起的资源竞争问题。队头(front):允许删除的一端,又称队首。队尾(rear): 允许插入的一端。空队列:不含任何元素的空表。队列的顺序存储 比较简单,下面我们学习一下队列的链式存储结构。队列的链式存储类型可描述为1 typedef struct{ //链式队列节点2 ElemType d... 阅读全文
posted @ 2013-12-05 15:48 枫桦宁 阅读(1859) 评论(0) 推荐(1) 编辑
摘要:原创博文,转载请注明出处栈(Stack)是一种线性表,但是只允许在一端进行插入或删除操作。栈的顺序存储成为顺序栈,它是利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶的位置。栈的顺序存储类型可描述为1 #define MaxSize 502 typedef struct{3 Elemtype data[MaxSize];4 int top 5 }SqStack初始时设置S.top=-1,栈顶元素:S.data[S.top]栈空条件:S.top==-1;栈满条件:S.top==MaxSize-1;栈长:S.top+... 阅读全文
posted @ 2013-11-27 19:41 枫桦宁 阅读(1964) 评论(0) 推荐(0) 编辑
摘要:原创博文,转载请注明出处链表分类:单链表,插入删除和查找的时间复杂度均为O(n) 双链表,插入、删除和查找的时间复杂度为O(1) 循环链表,表中最后一个节点的指针不是NULL,而改为指向头结点,从而整个链表形成一个环。 静态链表,借助数组来描述线性表的链式存储结构,这儿的指针是结点的相对地址。和顺序表一样需要预先分配一块连续的内存空间。以next==0作为其结束的标志。综合应用: 1.设计一个递归算法,删除不带头节点的单链表L中所有值为x的节点。 思路:可以设计一个函数f(L,x)删除以L为首结点指针的单链表中所有值为x的结点,那么f(L->n... 阅读全文
posted @ 2013-11-12 15:01 枫桦宁 阅读(3984) 评论(3) 推荐(1) 编辑
摘要:原创博文,转载请注明出处线性表是一种逻辑结构,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构,两者属于不同层面的概念,因此不要将其混淆。接下来我们学习:第一部分:线性表的顺序表示顺序表最主要的特点是可以进行随机存取,即通过首地址和元素序号可以在O(1)的时间内找到指定的元素。顺序表的存储密度高,每个节点只存储数据元素,但是插入和删除需要移动大量元素。插入、删除、查找的时间复杂度为O(n)综合应用 : 1、设计一个高效算法,将顺序表的所有元素逆置,要求算法的空间复杂度为O(1). 算法思想:扫描顺序表L的前半部分元素,对于元素L.data[i](0t的第一个元素(最后一个... 阅读全文
posted @ 2013-10-29 19:28 枫桦宁 阅读(2183) 评论(0) 推荐(1) 编辑