- 博客(14)
- 资源 (6)
- 收藏
- 关注
原创 递归的经典应用----汉诺塔问题
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。#include using std::cin;using std::cout;using std
2013-12-24 12:25:02 949 1
原创 基本数据结构:链式队列
队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表 (1)允许删除的一端称为队头(Front)。 (2)允许插入的一端称为队尾(Rear)。 (3)当队列中没有元素时称为空队列。 (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。 队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾
2013-12-23 22:08:49 623
原创 基本数据结构:栈
堆栈(英语:stack),也可直接称栈。在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英语:top)进行加入资料(英语:push)和输出资料(英语:pop)的运算。另外堆栈也可以用一维阵列或连结串行的形式来完成。堆栈的另外一个相对的操作方式称为伫列。由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last
2013-12-23 17:13:22 679
原创 STL库list的模拟
直接看代码#ifndef LIST_H#define LIST_Htemplate class List{private: struct Node { T data;//值域 Node *prev;//前驱 Node *next;//后继 Node( const T & d = T(), Node * p = nullptr, Node
2013-12-22 22:26:16 641
原创 STL库中vector的模拟
数据结构和算法分析C++描述中作者对STL中vector进行了模拟,实现了vector的简单功能,好东西不能独享,代码奉上#ifndef VECTOR_H#define VECTOR_H#include "dsexceptions.h"template class Vector{public: explicit Vector(int size = 0) : theSize(s
2013-12-22 12:29:31 527
原创 归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。数据结构与算法分析C++描述中图解如下:可以看出合并有序
2013-12-20 22:27:30 473
原创 插入排序
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。步骤⒈从有序数列{a1}和无序数列{a2,a3,…,an}开始进行排序;⒉处理第j个元素时(j=2,3,…,n),数列{a1,a2,…,aj-1}是已有序的,而数列{aj,aj+1,…,an}是无序的。用aj与aj
2013-12-20 21:25:05 592
原创 最大子序列和问题
问题: 给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大 例如:整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为21。对于这个问题,最简单也是最容易想到的那就是穷举所有子序列的方法。利用三重循环,依次求出所有子序列的和然后取最大的那个。当然算法复杂度会达到O(n^3)。
2013-12-20 10:00:30 671
原创 约瑟夫问题
约瑟夫问题是一个利用循环链表的经典问题,问题描述如下:(度娘搜滴)约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”) 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是
2013-12-19 16:21:50 775
原创 基本数据结构:循环单链表
上篇对单链表进行了详细说明,本篇接下来说说单循环链表单循环链表就是在单链表基础上,尾巴元素指向了头,形成了圆圈,操作时只有注意尾部元素链接头就OK,废话不多说,直接上代码单循环链表定义类 CircleLinkedList.h#ifndef CIRCLE_LINKEDLIST_H#define CIRCLE_LINKEDLIST_H#include #include using
2013-12-19 13:13:06 801
原创 基本数据结构:单链表
链接方式存储的线性表简称为链表(Linked List)。 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的) ② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))注意
2013-12-19 11:19:26 709
原创 基本数据结构:顺序表
顺序表,数组就是典型的顺序表,顺序表便于查询元素,单移动、删除时间开销比较大,好了废话少说,直接上代码,对照源码看吧#ifndef SEQLIST_H#define SEQLIST_H#include #include using std::cin;using std::cout;using std::cerr;using std::endl
2013-12-18 17:21:27 1041
原创 00 开篇
前日,与老同学喝酒聊天,一起追忆起大学里青春飞扬的岁月,感叹起岁月的流逝,默然回首,老同学们都在IT业混的风声水起,唯有我却在行业外做着非主流的事情,回家看着沾满灰尘的大学课本,感慨万千!曾经的梦想不知道藏在内心那个角落,望着熟睡的妻儿,默默做出决定,IT,我终究会回来的!本系列博文以清华尹人昆版数据结构、算法导论2本书为主线,所有代码均采用C++实现,少用文字,多用代码和注释,重新再一次
2013-12-18 09:33:53 571
转载 C语言的那些秘密之---函数返回局部变量
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意
2013-12-09 22:33:14 442
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人