数据结构与算法
文章平均质量分 87
coding__madman
爱IT & 爱生活 && no error & no warn
展开
-
冒泡排序及算法优化
冒泡排序原创 2016-03-01 18:31:59 · 747 阅读 · 0 评论 -
二叉通用树C语言实现---双亲孩子法
还是国嵌之前数据结构和算法视频里面唐老师的代码,最近刷二叉树的相关题目,整好拿来用用,先贴源代码,顺便复习一下,老师的代码真的很棒!后边借助老师之前的链表以及栈的实现,非递归实现二叉树的前序遍历、中序遍历、后续遍历、以及层次遍历-全部用栈实现。目标实现如下二叉树,并且打印结果,/举例/************************************ A...原创 2018-12-01 15:23:31 · 868 阅读 · 0 评论 -
单链表系列
题目:输入一个链表的头结点,从尾到头反过来打印出每一个节点的值。(不能改变原有链表的结构)这里单链表的实现用的是当初学习国嵌数据结构和算法视频里面唐老师实现的源码,老师的代码实现的非常经典。今天复习算是领悟到了!该链表实现精妙之处:写的链表不受业务结构而限制,在我们用的数据类型发生改变时并不需要去改变底层的链表结构。链表结点LinkListNode中只放next指针域。数据业务数据可以根据...原创 2018-11-19 17:30:11 · 334 阅读 · 0 评论 -
不修改数组查找数组中任意一个重复的数字
题目:在一个长度为n+1的数组里所有的数字都在1~n的范围内,所以数组中至少有一个数字是重复的,请找出数组中任意一个数字,但不能修改输入的数组。#include <stdio.h>#include <stdlib.h>//统计数字start 到 end 中的数字在整个数组中出现的次数 int countRange(const int* Array, int l...原创 2018-11-18 23:59:09 · 282 阅读 · 0 评论 -
数组中重复的数字03---剑指offer
一本好书,书已看完(作者已提供所有习题编程源码),不多说。现在第二遍准备慢慢刷题来提高编码实践能力。先从简单入手!虽然是一个简单的题目,但是知易行难!(虽然看过书,但是自己实现的时候对数组元素的合法性检查就没有考虑到)题目:找出数组中重复的数字。在一个长度为n的数组里的所有的数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个重复了几次。请找出数组中任...原创 2018-11-18 19:17:38 · 211 阅读 · 0 评论 -
关于C语言结构体偏移的一点思考
前言相信大家在c语言程序开发的过程一定都使用过结构体,那么不知你对结构体中成员变量偏移这块是如何理解的?本文将和大家一起分享下,本人最近关于c语言中结构体偏移的一些思考和总结。另外这篇博文还可以帮你更好的理解这个问题c语言中两种宏定义的区别,关于这个思考有哪些方面的意义,细心的你可能发现本文所属的类别为linux内核设计与实现,而并非 GNU C语言编程,可能有些同学会有些许好转载 2016-06-01 15:34:45 · 2316 阅读 · 0 评论 -
单链表逆序———不借助外部辅助空间递归与非递归实现
单链表逆序 第二个题目是很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个问题,链表的初始状态如图(1)所示:图(1)初始转载 2016-04-18 14:52:51 · 1742 阅读 · 0 评论 -
递归深度实战
递归与回溯1. 递归在程序设计中也常用于需要回溯算法的场合2. 回溯算法的基本思想:(穷举搜索算法) 1> 从问题的某一种状态出发,搜索可以到达的所有状态 2> 当某个状态到达后,可向前回退,并继续搜索其它可达状态 3> 当所有状态都达到后,回溯算法结束3. 程序设计中可利用函数活动对象保存回溯算法的状态数据,因此可以利用递归完成回溯算法4. 回溯算法是递归应用的重要场合,同时利用函数调用的活动对象可以保存回溯算法中重要的变量信息,递归是回溯原创 2016-04-06 22:41:13 · 4733 阅读 · 0 评论 -
通用树的存储结构
树的存储结构难点:无法直接用数组表示树的逻辑结构但是却可以设计结构体数组对结点间的关系进行表述如下图:(用一个表格描述图中的树)那么问题来了:1. 树结构需要添加和删除结点,数组存储是否足够灵活?答:树经常需要动态的插入和删除结点,数组存储肯定不够灵活。2. 每个结点的子节点可以有多个,如何存储?答:看下面树的存储结构:1. 利用链表组织树中的各原创 2016-03-13 20:57:37 · 2266 阅读 · 0 评论 -
树的定义
树的定义:1. 树是一种非线性的数据结构2. 树是由n(n >= 0)个节点组成的有限集合如果 n = 0, 称为空树如果n > 0,则:1. 有一个特定的称之为根(root)的节点,它只有直接后继,但没有直接前驱2. 除根以外的其它结点划分为 m (m ≥ 0) 个 互不相交的有限集合T0, T1, …, Tm-1,每个集合又是一棵树,并且称之为根的子树(subTre原创 2016-03-13 16:04:46 · 891 阅读 · 0 评论 -
二分查找算法递归和非递归实现
自己接触和了解过的查找算法总结起来分为3个吧:1. 静态查找(主要是二分查找,效率较高)2. 动态查找(二叉查找树)3. 哈希表首先来说二分查找吧!基本思想:时间复杂度:空间复杂度:代码示例:#include //二分查找非递归实现 int BinSearch1(int Array[], int low, int high, int key){原创 2016-03-10 00:44:09 · 8159 阅读 · 0 评论 -
归并排序
基本思想:归并排序采用的是经典的分治法思想,基本步骤可以分为两步,一归二并。先说简单的并,就是将两个有序的数列合并成一个有序的序列(这个代码实现和容易),难点在于怎么让二组数据组内数据有序,算法采用递归的思想,将两个小组分成四个小组,继续分直到每个小组内只有一个数据时可以认为每个小组组内数组已经是有序的了,然后再合并相邻的两个小组直到整个排序完成。时间复杂度:O(n*log(n))空间复杂...原创 2016-03-06 17:05:20 · 578 阅读 · 0 评论 -
希尔排序
基本思想:时间复杂度:n*log(n)空间复杂度:O(1)是否是稳定排序:不是稳定排序代码示例:原创 2016-03-06 14:52:42 · 520 阅读 · 0 评论 -
快速排序
算法思想:快排是采用的分治思想。一般取第一个元素为基准,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比基准要小,另一部分数据都比基准要大,然后用同样的方法对着两部分数据分别进行快排,快排使用递归思想,直至整个数列变为有序数列。时间复杂度:n*logn(平均时间复杂度)空间复杂度:O(1)是否是稳定排序:不是稳定排序代码示例: #include &l...原创 2016-03-03 11:42:14 · 682 阅读 · 0 评论 -
选择排序和插入排序及其优化
选择排序(固定位置,找元素)基本思想:对于长度为N的无序数列,第一次遍历,将第0个元素和后边所有元素相比较,找出最小的元素,然后和第0个元素交换,第二遍历,将第1个元素和后边所有的元素比较,找出剩下元素中最小的元素,然后和第1个元素交换,重复以上步骤直至最后一次遍历只剩下两个元素的时候,排序完成。时间复杂度:O(n*n)空间复杂度:O(1)是否是稳定排序:不是稳定排序代码示例:...原创 2016-03-02 15:51:08 · 1002 阅读 · 0 评论 -
二叉树通用树层次遍历、前序遍历、中序遍历、后序遍历栈结构非递归实现
目的:主要是刷二叉树相关的题,把之前的源码拿来用顺便学习复现一遍,锻炼一下编程能力。其中层次遍历用栈实现是自己写的,前、中、后序遍历以前学过的也有好多同志网上有相关博客!过程分析的比较详细,我自己学习方法是画图,举例一个二叉树,然后用笔一步一步推演,寻找其中的 规律,这其中也参考了别人的思考成果。想明白后,然后自己实现起来就比较容易了,对代码的理解也更深刻,这里只源贴代码以及运行结果!(网上的也参...原创 2018-12-01 15:59:21 · 734 阅读 · 0 评论