数据结构
文章平均质量分 75
一位小白
这个作者很懒,什么都没留下…
展开
-
单链表的建立,查找,插入,删除,测长,打印,逆置操作实现
#include<iostream>#include<stdio.h>#include<string.h>#include<conio.h>using namespace std;typedef struct student{ int data; struct student *next;}node;//建立单链表,头插入...原创 2018-03-22 19:59:14 · 1323 阅读 · 2 评论 -
单链表的就地逆置
转载自 https://blog.csdn.net/v_xchen_v/article/details/53067448 单链表的就地逆置是指辅助空间O(1)的逆置方法,有两种方法:普通循环(头插法重新建立带头节点的新链表)和递归。下面我们详细介绍这两种方法:方法一:头插法算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置...转载 2018-06-07 18:25:18 · 29208 阅读 · 18 评论 -
二叉树的最大深度和最小深度
https://blog.csdn.net/xiongqiaochu/article/details/70313031二叉树的定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL...转载 2018-06-21 14:40:24 · 1668 阅读 · 2 评论 -
如何判断一个链表是否有环,并找出环的入口
http://blog.csdn.net/gukesdo/article/details/7516021首先如何判断一个链表是否有环:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:bool IsExitsL...转载 2018-06-21 10:17:02 · 1879 阅读 · 2 评论 -
堆排序
算法流程:可以归纳为两个步骤: 步骤一:构造初始堆。将给定无序序列构造成一个大顶堆(一般升序采用大顶堆,降序采用小顶堆)。 步骤二:将堆顶元素与末尾元素进行交换,使末尾元素最大。然后继续调整堆,再将堆顶元素与末尾元素交换,得到第 二大元素。如此反复进行交换、重建、交换。#includ...原创 2018-04-27 17:19:11 · 131 阅读 · 1 评论 -
链队列的创建,删除等操作(C++)
随手记;#include<iostream>using namespace std;//定义节点类;class node {public: int data; node *next;};//定义链表类;class link_queue {public: link_queue() { front = new node; front->next = ...原创 2018-04-19 21:53:55 · 2677 阅读 · 0 评论 -
插入排序
参考自:https://blog.csdn.net/hjimce/article/details/79182739 1、算法流程(1)假设数据集A,第i个元素的左边是排序好的;(2)把第i个元素a从右到左与i左边的元素b比较,如果发现该b>a,那么就把b后移一个位置(需要把a元素的位置先临时保存下来,然后空出位置);直到b<a的时候,就把a插进去。2、代码实现...转载 2018-04-12 10:46:36 · 170 阅读 · 0 评论 -
选择排序
参考自: https://blog.csdn.net/hjimce/article/details/79182899 1、算法流程(1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。(2)然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。(3)以此类推,直到所有元素均排序完毕。2、代码实现 #include<iostream&g...转载 2018-04-12 10:39:08 · 157 阅读 · 0 评论 -
循环链表解决约瑟夫环问题
题目要求的约瑟夫环操作:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。所以这个不能使用头节点;//循环链表解决约瑟夫环的...原创 2018-03-29 15:12:04 · 1717 阅读 · 0 评论 -
循环队列的插入与删除操作(C++)
记录一下C++实现循环队列;#include<iostream>using namespace std;class queue {public: queue(int max) { front = 0; rear = 0; maxlen = max; myqueue = new int[maxlen]; num = 0; } ~queue() { ...原创 2018-04-17 15:10:46 · 6803 阅读 · 0 评论 -
双链表的建立以及插入,删除操作
//双链表#include<iostream>#include<string>#include<stdio.h>#include<stdlib.h>using namespace std;typedef struct student{ int data; struct student *next; struct stude...原创 2018-04-04 13:57:53 · 727 阅读 · 0 评论 -
冒泡排序
(1)循环比较两个相邻的元素,如果第一个比第二个大,那么交换(2)经过第一轮迭代后,最后一个元素是最大值;然后继续第二轮迭代,除了最后一个之外(3)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。#include<iostream>#include<vector>#include<stdio.h>using namespace ...原创 2018-04-09 20:59:05 · 125 阅读 · 0 评论 -
快速排序
1、算法流程(1)输入两个哨兵i,j,整个过程要一直保证i<j;(1)从数组D中选择第一个数为基准数A=D[i];(2)循环查找交换对,并交换,直到不满足i<j:从i+1元素开始,向右查找大于A的数a(始终保证i<j);从j元素查找小于A的数b(始终保证i<j),得到交换对(a,b),然后进行交换(4)判断终止位置i=j的位置数值与基准数A是否需要交换,这样最后得到的就...转载 2018-04-09 15:34:22 · 86 阅读 · 0 评论 -
回文链表
回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?这个题目我们需要注意的是时间复杂度和空间复杂度,我的想法是第一步:遍历链表,知道链表的长度;第二步:就地逆至前一半链表,使用两个指针,分别从头比较每一半的链表数...原创 2018-06-20 16:05:01 · 225 阅读 · 0 评论