【算法数据结构】
文章平均质量分 86
后端沉思录
不断学习的小学生。
展开
-
顺序栈的简单操作
关于顺序栈的简单操作如下, 由于主要介绍思想实现,读者从代码中可以很容易看出很多漏洞。如有错误之处,请大家指正!#includeusing namespace std;#define MAXSIZE 10 struct Stack { int data[MAXSIZE]; int top;}; Stack *CreateStack(); //该步骤函数声原创 2015-10-17 18:38:44 · 560 阅读 · 0 评论 -
Josephus问题解决方法四(循环数组)
前几篇都是运用了循环单链表的知识解决该问题(http://blog.itpub.net/29876893/viewspace-1815055/,http://blog.itpub.net/29876893/viewspace-1850077/,http://blog.itpub.net/29876893/viewspace-1851818/),下面用循环数组来解决该问题。运用的解题思路和第三篇类似原创 2015-12-03 23:26:44 · 1020 阅读 · 0 评论 -
Josephus问题解决方法五(递归)
该问题的解决方法有很多种,关于Josephus问题,前面已经给出了4种解法(http://blog.itpub.net/29876893/viewspace-1853008/),是笔者对该问题产生浓厚的兴趣下而写出的,这些算法(可以说是很简单的吧,嘿嘿)是笔者走路或者吃饭的时候想出的(原创哦~_~),也许其中功能不是太完善或不当之处,请大家谅解。今天突然想起解决该问题是不是可以用递归呢?立马打开V原创 2015-12-09 13:48:34 · 720 阅读 · 0 评论 -
交换排序
交换排序是一类借助“交换"进行排序的方法,其主要思想是:在待排序序列中选两个记录,将它们的关键码进行比较,如果反序则交换它们的位置。下面主要介绍交换排序中的冒泡排序和快速排序方法。冒泡排序(Bubble Sort):是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就原创 2016-01-20 15:16:19 · 576 阅读 · 0 评论 -
插入排序
插入排序的主要思想是将一个待排序的一组数按照其关键码的大小插入到已经排好序的有序序列中,直到所有待排元素插入对应的序列中。下面给出维基百科上插入排序的定义:(https://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F)插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未原创 2016-01-18 21:46:29 · 692 阅读 · 0 评论 -
队列的链式存储结构
队列的顺序存储结构(参考前面文章:点击打开链接)比链式较为复杂些,顺序存储结构要构造循环队列;但是链式就不需要,存储元素的内存地址是随机的,用的时候再向os申请内存空间。链式存储结构中需要两个flag工作指针,过程相对较简单些。但是其中也有需要注意的细节。下面给出实现代码:点击(此处)折叠或打开#includeiostream>using namespa原创 2015-12-01 15:26:51 · 780 阅读 · 0 评论 -
二叉树的非递归遍历
前面一篇介绍了二叉树的递归遍历操作点击打开链接,下面介绍二叉树的非递归遍历操作。运用递归操作,很容易进行二叉树的遍历,结合上篇文章的介绍,在递归的时候都是找到当前结点,压入”栈“中,然后再通过当前结点找到左(右)孩子,递归函数每次返回时,当前结点都会出”栈“。在非递归遍历时,那就构造一个栈,用来存取每个结点的指针,通过该结点找到(左)右孩子,思路是有了。下面结合下图简单的说明一下:原创 2015-11-30 17:36:06 · 619 阅读 · 0 评论 -
队列的顺序存储结构
队列的顺序存储结构相对于链式存储结构较为复杂,本文重点介绍队列顺序结构。下面简单的谈两个问题:1.由于是顺序队列,很容易想到用数组来存储元素,假如一个队列的长度是10,就是一下可以放入10个元素,当9个元素出队后,又放入3个元素,此时是不是要再增长数组的长度呢?实际中不可能增加数组的长度而任内存空间的浪费,所以我们要构造循环队列,也就是当rear=(队列的长度-1),rear=(rear+1)原创 2015-11-26 23:53:19 · 1691 阅读 · 0 评论 -
数据结构之二叉树递归操作
二叉树(binary tree)是n(n>=0)个结点的有限结合,该集合或者为空集(空二叉树),或由一个根结点和两棵互不相交的,分别称为根结点的左子树(left subtree)和右子树(right subtree)的二叉树组成。二叉树的特点:1.每个结点最多有两棵字树,所以二叉树中不存在度大于2的结点2.二叉树是有序的,其次序不能任意颠倒,即使树中的某个结点只有一棵字树,也要原创 2015-11-20 02:15:23 · 1394 阅读 · 0 评论 -
Josephus问题解决方法一
关于该问题简单描述:假设有n个人排成一个圈。从第一个人开始报数,数到第m个人的时候这个人从队列里出列。然后继续在环里数后面第m个人,让其出列直到所有人都出列。最后一个出列的是胜出者。下面用链表模拟n个同学手拉手围成一个圈。如果m为1的话,该游戏没有了意思,因为这样的话,第n个人一定是胜出者,所以排除这种情况。解决该问题,有很多方法,本方法用的是循环单链表。如有不当之处,请读者指正!#inclu原创 2015-10-20 01:49:12 · 756 阅读 · 0 评论 -
Josephus问题解决方法二
前面文章写了关于Josephus问题解决的一种方法点击打开链接,但是由于前面的程序有两处错误,本人写文章时太粗心!导致运行结果错误,下面修正:(原文已经修正,下面指出已对自己粗心的教训)点击(此处)折叠或打开... ...Note *InitNote(Note *first, int n) { Note *head, *p原创 2015-11-30 22:31:51 · 730 阅读 · 0 评论 -
Josephus问题解决方法三(单向循环链表标识法)
前面解决Josephus问题时(http://blog.itpub.net/29876893/viewspace-1815055/,http://blog.itpub.net/29876893/viewspace-1850077/),都是找到该同学后,把该同学从环中除去,然后剩下的同学再组成一个新的环,终止条件是p != p->next。下面我们换种方式考虑该问题,可不可以找到该同学后,标识该原创 2015-12-02 23:44:29 · 865 阅读 · 0 评论 -
二分查找算法
关于二分法查找,也经常称折半查找,思想就是“分而治之”,网上有很多资料,给出维基百科上的链接(https://zh.wikipedia.org/wiki/%E6%8A%98%E5%8D%8A%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95,http://www.codecodex.com/wiki/Binary_search),本文不作赘述。下面给出二分查找的非递归和递归的原创 2015-12-08 16:09:38 · 657 阅读 · 0 评论 -
单链表简单操作1
下面简单的进行单链表的插入删除销毁等操作,想重点的说一下,关于链表插入的时候,分为三种情况,不过原理都一样。在尾插的时候,我们没有遍历链表,不清楚链表的长度,如何判断for循环如何终止呢?点击(此处)折叠或打开#includeusing namespace std;struct List {int data;原创 2015-10-15 19:43:13 · 605 阅读 · 0 评论 -
循环双链表的简单操作
下面是循环双链表的简单操作,其中很多细节没有考虑到,比如没有判断空链表,目的提供思想,如有出现错误,请大家指正!点击(此处)折叠或打开#includeiostream>//#includestdlib.h>using namespace std;struct List { int data; struc原创 2015-10-16 01:08:20 · 658 阅读 · 0 评论 -
循环双链表的创建初始化
前面对单链表进行了简单的操作,下面是循环双链表的创建初始化:点击(此处)折叠或打印#includeiostream>//#includestdlib.h>using namespace std;struct List {int data;struct List *last, *next;};原创 2015-10-15 19:46:08 · 952 阅读 · 0 评论 -
单链表链式结构的创建
翻看之前的书本,总结一下数据结构方面的小知识点。关于单链表的顺序结构就不说了,比较简单。下面用C++来简单的说明:#includeusing namespace std;struct List {int data;struct List *next; //结点};List *CreateFirst() {List *first;原创 2015-10-10 23:53:33 · 475 阅读 · 0 评论 -
栈链式结构简单操作
关于栈的链式存储结构,下面用的是单链表头插法创建栈,因为头插法的特点是在头结点(frist)与NULL空结点(first ->next)之间插入各结点,存储数据的入栈顺序和出栈顺序是相反的,和栈的特点很相似,工作指针如top指针一样,始终指向栈顶(第一个结点)。下代码如有不当之处,请指正!#include//#includeusing namespace std;struct Stack原创 2015-10-19 13:15:44 · 541 阅读 · 0 评论 -
二叉排序树
二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的左、原创 2016-02-03 23:51:52 · 817 阅读 · 0 评论