Data Structure and Algorithm
文章平均质量分 72
Apollon_krj
岁月悠悠,衰微只及皮肤;热忱抛却,颓唐必至灵魂。
展开
-
剔除单向链表重复值节点时的烦人bug
一、初步实现:以前在写单项链表重复值删除的时候,用的是先排序然后进行重复值剔除的方法。重复值剔除完毕之后,得到的元素也是有序的,然后顺利的写完了,没有出现任何bug。也就没有去尝试新的方法去做,代码如下:# include<stdio.h># include<stdlib.h># include<time.h>typedef struct Node{ int data; stru原创 2016-10-15 21:00:04 · 486 阅读 · 0 评论 -
代码隐藏到数据之中的“骚”操作
函数指针,可以为一个函数重命名,代替其进行函数调用,而我们也用函数指针做过简单的C语言面向对象编程:函数指针与C的面向对象 。书上说(很多人这样说):函数指针是为了便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。这从正向的角度来说依旧是总结性的,而不是本质性的,函数指针并非是针对于面向对象的,从本质来说它更是用来做数据与代码转换的,怎么说? 如果我们设计了个功能函数比较重要,也不想其他原创 2017-08-08 10:25:37 · 1550 阅读 · 1 评论 -
随机数生成器与线性同余法产生随机数
1、随机数生成器与/dev/random:随机数生成器,顾名思义就是能随机产生数字,不能根据已经产生的数预测下次所产生的数的“器”(器存在软件与硬件之分),真正的随机数生成器其产生的随机数具有随机性、不可预测性、不可重现性。什么是真正的随机数生成器?指的是由传感器采集设备外部温度、噪声等不可预测的自然量产生的随机数。比如Linux的/dev/random设备文件其根据设备中断(键盘中断、鼠标中断等)原创 2017-12-05 17:48:29 · 5183 阅读 · 0 评论 -
幸运数算法
在技术问答中看到一个问题:有关指定范围内幸运数个数的查找问题。由于以前没写过,就写了一下,顺便帮这位同学解决一下他的问题。1、题目:标题:幸运数 幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。 首先从1开始写出自然数1,2,3,4,5,6,…. 1 就是第一个幸运数。 我们从2这个数开始。把所有序号能被2整除的项删除,变为: 1 _ 3 _ 5原创 2016-12-20 22:40:34 · 4007 阅读 · 0 评论 -
一个枚举算法题目引发的Qt小游戏
前几天在做一道枚举算法的题目,由于其题目的特殊性导致做到最后,竟然演变成一个Qt小游戏的编程。首先来描述一下题目:有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变原有状态。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。如果某一按钮周围不存在上/下/左/右,则只改变存在的位置。原创 2017-08-01 18:40:38 · 1099 阅读 · 0 评论 -
黑白棋算法简单实现与基于Qt的GUI编程的综合应用
一、序言:最近学习了Qt的界面编程,包括了QObject、QWidget、QIODevice、QMessageBox、QTcpSockt、QTcpServer、QFile、QFileInfo、QDataStream、QTextStream、QBuff、QPixmap、QImage、QBitmap、QPicture、QTimer定时器…等基本类的使用;基本事件的处理与过滤的学习、信号与槽的学习、QCr原创 2017-06-28 11:42:48 · 4657 阅读 · 2 评论 -
《编程珠玑》-- 开篇:BitMap算法用于磁盘文件排序的原理与实现
一、问题提出与描述:我们经常会遇到一类问题,这类问题是:有一个大的文件,该文件中存有大量的未经排序的数字,给定限制大小的内存,设计算法实现对该文件中的所有数字的排序,并将排序结果放到新文件中(经常会以时间日期等命名)。比如:有一个文件,该文件中有0~4294967295区间内的2147483648个数字,并且是乱序的,给定内存为1GB,对该文件中的数字进行排序。一般情况下,这类问题有个特点,就是给定原创 2017-06-14 20:20:20 · 1956 阅读 · 3 评论 -
链表操作法则之逆向遍历与倒置算法
一、创建链表:对链表进行操作的所有算法的前提,就是我们首先要创建一个链表,我们可以选择正向建链和逆向建链:(一)、正向建链:首先,我们得自定义节点类型:typedef struct Node{ int data;//数据域 struct Node * pNext;//指针域}NODE,*PNODE;通过数组进行链表数据域的赋值:int main (void){ PNOD原创 2016-07-18 11:56:25 · 3685 阅读 · 4 评论 -
算法实例:枚举的魅力
两道“奥数题”说说枚举法: ①如何找到一个整数ABCDE(A、B、C、D、E分别为万位、千位、百位、十位、个位,A不为0)乘以A,得到结果为EEEEE。 ②A?B?C?D?E = F(A、B、C、D、E、F均为整数),在ABCDE之间填入四个运算符(+、-、*、/四种中随意组合),使得等式成立,求出所有组合。 枚举法本质:从所有的候选答案中去搜索正确的解必须满足条件: ①可以预先确定原创 2017-04-21 23:32:22 · 6609 阅读 · 0 评论 -
AVL树的插入与旋转算法解析
1、AVL树的基本概念:AVL树又称为平衡二叉排序(搜索)树,AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 “An algorithm for the organization of information” 中发表了它。分解开来看:AVL树是一棵二叉树进一步是一棵二叉排序树、并且AVL树涉及平衡因子这个概念。节点的平衡因子原创 2017-04-05 22:07:14 · 5223 阅读 · 2 评论 -
几道链表操作的经典面试题:链表有环、删除节点
1、判断单链表是否有环:题目描述:判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度?图解分析:对于有环无环,我们只需要快慢指针,在快指针fast != NULL && fast->next != NULL 成立时,若是能达到快指针与慢指针的再次重逢,则其有环。 对于环的长度、非环段长度、环与非环交点的数据/地址等问题,其主要矛盾在于要发现分析中的关系式,把握住了这个关系式,就能很好解决原创 2017-03-09 23:26:15 · 938 阅读 · 0 评论 -
数据结构--链式栈、顺序栈的基本实现与简单应用:进制转换
一、栈的基本概念:1、栈(Stack),是基本数据结构中比较重要的一种,其遵循的基本原则是:先进后出(First In Last Out,FILO);我们编程时操作系统为函数参数压栈,其系统内核栈的实现就是基于该数据结构。我们以顺序栈来介绍起基本结构。下图为一个基本的栈的结构(这是一个顺序栈):我们所建的栈以及内核中实现,在结构上其实并非该图所示,因为内存地址从高到低分配,所以栈应该是“口朝下”的,原创 2016-12-12 20:20:28 · 2563 阅读 · 0 评论 -
二叉树与其基本递归操作:创建、遍历、特征量计算等
一、基本概念:1、什么是树(Tree)?通常,我们所学的数据结构在现实生活中能找到其灵感来源,那么树,顾名思义,其结构就像一棵树,只不过这棵树有点奇怪,它是倒过来的如下所示:在数据结构中,关于树的名词很多,但是基本都是看见这个名词,我们就能就知道这个名词所表述的大概意思,根据上面这棵树,我们对其中重要的一些名词作以简单的解释:(1)、根节点:树的第一个节点,它位于树的第一层,第一层有且仅有一个节点,原创 2016-12-11 22:58:16 · 625 阅读 · 0 评论 -
数据结构初学过程中对算法效率度量的理解
引例: 对于给定数组a[8]={10,20,30,40,50,60,70,80}; 如何将数组前三个元素移到数组后面使得: a[8]={40,50,60,70,80,10,20,30}?1、第一种方法(耗费内存): 定义一个新的空白数组b[],将a[3]往后的元素依次放入b[0]至b[4],接着将a[0]至a[2]放入b[5]至b[7].最后用代码a[i] = b[i];将元素移入a[]中即原创 2016-05-02 21:52:48 · 837 阅读 · 0 评论 -
数组元素奇偶排序程序中的死循环引起的思考
(本人原创,转载需注明出处,如有不对的地方,也欢迎各位批评指出)一、问题描述有一数组: a[8] = {56,68,20,15,17,101,132,119,} 对该数组进行排序使得奇数全部在偶数的前面,并且不可以引进分配新的数组空间。二、问题解决看到这样的题目,也许会觉得很简单,因为题目的目的很明确,只要将奇数全部移到偶数的前面即可,而奇数与奇数之间、偶数与偶数之前都不要求顺序。最开始我想到了原创 2016-05-27 22:57:08 · 1571 阅读 · 0 评论 -
两个升序单向链表的合并
1、问题描述:有两个非空升序排列的单向链表pHeadA和pHeadB,将其合并为一个升序链表pHead,并剔除其中的重复值。2、问题分析:(1)、两个升序链表合并成一个升序链表,其实就是原链表删除节点,但不释放内存,而是将要删除(移动)的节点根据数据域大小关系以及不重复原则,挂在新的头指针上,形成新的链表的过程。并且新的链表依然是升序,就要求我们正向建链合并。 (2)、数据域大小关系:在链表删除的原创 2016-09-14 00:20:01 · 3727 阅读 · 0 评论 -
二叉树的层次遍历及其变型
一、二叉树的层次遍历题目分析:题目简述: 给定一棵二叉树的根节点root,请编写函数方法,实现二叉树的层次遍历。如,有一棵二叉树如下: 其不同的遍历方式的遍历结果分别为: 先序遍历:A、B、D、E、C、F、G 中序遍历:D、B、E、A、F、C、G 后序遍历:D、E、B、F、G、C、A 层次遍历:A、B、C、D、E、F、G那么所谓层次遍历,顾名思义就是遵循...原创 2018-02-23 16:06:34 · 706 阅读 · 0 评论