
Data and Algorithm
Hardy-Lee
一名c++程序猿!主要做android ndk方向研发,专注于底层技术,对于新技术充满学习兴趣!!!
展开
-
单链表常见操作
//student.h//定义学生类型结构体#include typedef struct student{ int num; //学号 char *name[32]; //姓名 struct student *next;}*pStu , Stu;//int LEN = sizeof(Stu);原创 2014-08-09 10:37:28 · 727 阅读 · 0 评论 -
统计电影票房排名前10的电影并存入另一个文件
今天看到一个笔试题,是这样的:给定一个文件(m.dat),里面保存了各个电影票房统计,要求写程序统计票房排名前10的电影,并把统计结果存入另一个文件。自己试着用C++实现一下,代码分享如下:(linux下gcc 编译)gcc编译,执行时要传入两个命令行参数,比如:./a.out m.dat li.dat (m.dat为源票房文件,li.dat 为存放前10的文件)原创 2014-09-17 22:06:49 · 2062 阅读 · 0 评论 -
求一个集合的所有子集
今天同学去面试,回来说其中有一道题是输出一个集合的所有子集,一时兴起,在网上上查找了一番,最后自己总结了一下:两种方法:1)递归实现我们假设对于一个集合生成所有子集的函数为F。那么F(1,2,3,4,5)将由两种可能组成:(1)对除1之外的元素组成的集合施加F;(2)对必然包含1在内的所有元素组成的集合施加F。注意:这两种情况是互斥的,所以不可能有情况重复!然后继续递归下去,就原创 2014-09-16 23:22:58 · 3171 阅读 · 0 评论 -
常见排序算法(冒泡、选择、插入、快速、归并C++实现)
常见排序算法(冒泡、选择、插入、快速、归并C++实现)#include using namespace std;// 冒泡排序void bubbleSort (int data[], size_t size) { for (size_t i = 0; i < size - 1; ++i) { bool ordered = true; for (size_t j = 0; j <原创 2014-09-16 21:33:35 · 1288 阅读 · 0 评论 -
用栈实现队列的效果
用两个栈实现队列的效果,可以入栈,出栈,判空等。。。实现的栈基本功能lstack.h#ifndef _LSTACK_H#define _LSTACK_H#include using namespace std;// 基于链式表的堆栈class Stack {public: // 构造过程中初始化为空堆栈 Stack (void) : m_top (NULL) {} /原创 2014-09-15 21:44:03 · 1083 阅读 · 0 评论 -
双向链表(插入,删除,追加,正反向遍历,查找。。。)
双向链表(插入,删除,追加,正反向遍历,查找。。。)#include #include using namespace std;class List{public: List(void) : m_head(NULL), m_tail(NULL), m_size(0){} ~List(void) { for(Node* node = m_head; m_head; m_head = node) { node = m_he原创 2014-09-14 18:49:06 · 4000 阅读 · 0 评论 -
二叉排序树(插入、删除、更新、遍历、搜索、求树高。。。)
#include using namespace std;// 有序二叉树(二叉搜索树)class Tree {public: // 构造过程中初始化为空树 Tree (void) : m_root (NULL), m_size (0) {} // 析构过程中销毁剩余节点 ~Tree (void) { clear (); } // 插入数据 void insert (in原创 2014-09-13 21:58:50 · 1256 阅读 · 0 评论 -
回溯法找迷宫最短路径
有一个二维数组,0表示路,-1表示墙,求其中任意两点的最短路径我们先看,怎么求一条路径:求两点路径是一个数据结构上的典型的迷宫问题,解决办法如下:从一点开始出发,向四个方向查找(上,右,下,左),每走一步,把走过的点的值+1,防止重复行走,并把走过的点压入堆栈(表示路径),如果遇到墙、或者已走过的点则不能前进,如果前方已经无路可走,则返回,路径退栈,这样递归调用,直到找到终点为止。原创 2014-09-21 22:46:49 · 8253 阅读 · 1 评论 -
不用临时变量交换两个数的值
就地交换两个数是比较经典而且基础的算法之一。 我们要交换两个数字,通常的做法就创建一个中间变量,然后进行循环赋值,比如说下面的代码:void Switch(int* p1, int* p2){ int tmp = *p1; *p1 = *p2; *p2 = tmp;}这种做法是最常见的一种交换两个数字的方法,但研究算法的人总是会提出比较诡异的转载 2014-09-19 22:25:15 · 1460 阅读 · 0 评论 -
双向、循环链表
在双向链表的结点中有两个指针域,其一指向直接后继,另一个指向直接前趋1. 线性表的双向链表存储结构typedef struct DulNode{struct DulNode *prior;ElemType data;struct DulNode *next;}DulNode,*DuLinkList;对指向双向链表任一结点的指针d ,有下面的关转载 2014-08-09 10:54:49 · 1265 阅读 · 0 评论 -
快速排序函数模板
这段时间对STL比较痴迷,遂做了些许研究,今天把原来写过的快速排序算法用模板函数重新写了一下,把代码贴出来分享一下有两个版本,版本二可以传入比较器,自己定义排序规则快速排序算法思路:1)从序列中选出一个元素作为基准;2)重排序列,所有比基准小的元素位于基准左侧,比基准大的元素位于基准右侧,和基准相等的元素位于任意一侧,此过程称为分组;3)以递归的方式对小于基原创 2014-09-18 22:44:51 · 2643 阅读 · 0 评论 -
用三段 140 字符以内的代码生成一张 1024×1024 的图片
【原方】用三段 140 字符以内的代码生成一张 1024×1024 的图片【知乎】有没有一段代码,让你觉得人类的智慧也可以璀璨无比Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable Mathematical Art 的比赛,参赛者需要用三条推这么长的代码来生成一张图片。具体地说,参赛者需要用 C++ 语言编写 RD 、 GR 、转载 2016-09-28 11:35:12 · 1049 阅读 · 0 评论