
数据结构&算法
文章平均质量分 67
ericliu000
主要研究PHP、MySql、数据结构&算法等。科技为善,希望在优快云大家庭里,结交更多的朋友!
展开
-
数据结构与算法的理解
数据结构数据结构研究的是: 如何将现实生活中,大量而复杂的问题,以特定的数据类型和特定的存储结构保存到内存中,以及对数据进行的一些相关操作。通俗解释: 因为现实生活中,有大量复杂的问题,这些问题当中,有线性的问题(比如保存一个班级的所有学生信息到计算机中),也有非线性的问题(比如图书馆的图书管理系统),这些问题不一样,比较复杂。纵使问题很复杂,但是计算机的物理存储结构就只有一种—线性存储。数据结原创 2016-01-26 10:54:52 · 1766 阅读 · 0 评论 -
使用栈判断回文
一、 背景什么是回文? 比如abba,abbba,1221等,从前读和从后读都一样,这就是回文。 abab就不是回文,因为从前读和从后读不一样。那么,你能够写一个程序判断一个字符串是否是回文吗?二、 启发回文:abba。也就是比较ab的逆序(ba)是否和ba相等。如果比较相等,那么就是回文,否则不是。我们能不能将ab提取出来,然后再逆序输出,再和后面的ba相比较? 如果比较都符合,那么这就是回原创 2016-01-30 16:03:02 · 17780 阅读 · 2 评论 -
快速排序
一、 背景桶排序:采用了以空间换时间的做法 冒泡排序:使用了以时间换空间的做法那么,有没有一种算法,空间用的没有那么大,时间有没有那么浪费呢? 有,那就是快速排序算法。二、 原理冒泡排序是相邻的两个数两两相比,并且是从一头开始,所以效率慢 那么能不能跳跃式的相比,从两头开始呢?可以选择一个数字作为基准点。 比这个数字小的数,都放在这个基准数字的左边。 比这个数字大的数,都放在这个基准数字的原创 2016-01-30 16:00:29 · 284 阅读 · 0 评论 -
冒泡排序
一、 背景使用桶排序,我们很好的进行了元素排序。假设我现在要进行10000000000个元素的排序,那要10000000001个空间。 这是不是太浪费内存了?假设我不只是输出分数,还输出得此分数对应的学生的姓名。 桶排序能满足吗?不能。 桶排序中,元素的下标是分数,无法实现下标与人的一一对应。 比如,同时5分的桶不能即是eric,又是david。二、 启发既然桶排序有很多限制,那么有没有一种原创 2016-01-30 15:57:12 · 333 阅读 · 0 评论 -
桶排序
一、 问题背景假设现在共有5个数,分别为5、3、1、2、4,将这5个数按照从小到大的顺序排列,如何排列呢?二、 启发数据结构中的线性结构—数组,其元素顺序已经排好序了。比如a[1] a[2]a[3]是连续的,排好序了。我们能不能从中得到启发?如图,0.1.2.3.4.5.6,已经排好序了 并且他们在输出的时候都是按照顺序输出的。 我们能从中得到些许启发吗?答案是可以的!我们可以使用元素的标号。比原创 2016-01-30 15:50:04 · 295 阅读 · 0 评论 -
树[数据结构]
一.树的定义1.什么是树有且只有一个根节点,有若干个互不相交的子树。 2.专业术语如上图:我们解释父节点、子节点、兄弟节点、堂兄弟节点。父节点:A为父节点 子节点:B、C是A的子节点 兄弟节点:B和C是兄弟节点 堂兄弟节点:D与E是堂兄弟节点 深度:树中节点的最大层次(从根节点到最底层节点的层数,图中深度为3) 叶子节点:没有子节点的节点(B、E是叶子节点) 度:子节点的个数二.树的分原创 2016-01-29 20:15:52 · 737 阅读 · 0 评论 -
深入理解递归以及汉诺塔问题[数据结构]
一.深入理解递归1.什么是递归?递归就是一个函数直接或者间接的调用自己。2.函数是如何完成调用的?2.1主调函数调用被调函数前,要做3件事1.主调函数将所有的实参、返回地址传递给被调函数 2.为被调函数的局部变量(包括形参)分配存储空间 3.将控制转移到被调函数入口。2.2被调函数返回主调函数前,要做3件事1.保存被调函数的额返回结果 2.释放被调函数所占的空间 3.依照被调函数保存的返回地原创 2016-01-29 09:51:28 · 848 阅读 · 0 评论 -
队列的理解与实现[数据结构]
一.基础知识1.什么是队列?满足先进先出的一种存储结构。2.队列的分类?1.链式队列(用链表实现的) 2.静态队列(用数组实现的)3.为什么静态队列必须是循环队列?如图: 如果不是循环队列,那么“队首”以下的元素都会被浪费掉!4.循环队列需要几个参数来确定?需要两个参数:front(队首)、rear(队尾) 1.队列初始化的时候:rear=front=0 2.队列空的时候:front==re原创 2016-01-28 14:42:57 · 417 阅读 · 0 评论 -
栈的理解与实现[数据结构]
一.栈的定义Tips:阅读本文之前,请先熟悉链表知识:链表的理解与实现栈是一种可以实现”先进后出“的数据结构。 栈只允许在栈顶进行插入、删除、遍历等操作。 如下图: 依次放入 5-6-7 到栈内。 拿出 6来,得先拿出 7来 拿出 5来,得先拿出7、6来。 也就是7后进的,7先出栈;5先进的,5后出栈。 二、栈的实现1.初始化一个栈1.1定义链表的节点结构typedef struct原创 2016-01-28 11:52:31 · 296 阅读 · 0 评论 -
链表的理解与实现[数据结构]
一、链表的定义n个节点离散分配,节点之间通过指针相连。除了首节点和尾节点之外,每个节点都只有一个前驱结点和一个后继节点。 如下图: 大家有没有发现,链表的结构很像一种交通工具,什么呢? 火车。(节点==车厢,指针==车厢间相连的绳索)二、链表的实现注意,这里实现的是链表中最简单的单链表。1、创建链表1.1 定义链表最基本的组成元素–节点我们由上面链表的定义可以知道,链表的每个节点应该含有两原创 2016-01-27 14:02:33 · 4563 阅读 · 3 评论 -
数组的理解与实现[数据结构]
一、概述相信大家对数组都不会太陌生,C、C++、Java、PHP等高级语言中,都有数组这个概念。数组是一种线性结构,也属于比较简单的一种结构。但是简单的东西往往意味着使用广泛。 数组在各大语言中都有所涉及,是很重要的一种数据结构。 掌握数组,可以使我们对编程有另一个角度的理解,有助于我们合理的使用数组,使代码“更上一层楼”。下面,我们就用C语言来实现数组吧!二、数组的实现建议:程序用到了C语言中原创 2016-01-26 12:40:43 · 527 阅读 · 1 评论 -
论PHP面向对象之-多态
面向对象的三大特征我们知道,面向对象有三大特征,分别是:封装继承多态封装与继承封装因为对象都对自己负责,所以,对象的很多东西都不需要或不可以暴露给其他对象。比如:小明不需要将所有的信息告诉别人;手机不能不封装而把CPU、内存卡等等都暴露给用户,这太危险了(如下图)。封装解决了数据的安全性,内在也体现了‘每个对象都对自己负责’。继承继承,没什么好说的,主要是实现了代码的复用。但说到这里,原创 2017-03-26 12:04:16 · 534 阅读 · 0 评论