计算机编程c++基础知识
文章平均质量分 72
lvmengmengzp
这个作者很懒,什么都没留下…
展开
-
堆排序--C语言实现
#includevoid FindMaxInHeap(int arr[], const int size) { for (int j = size - 1; j > 0; --j) { int parent = j / 2; int child = j; if (j ++原创 2014-04-10 11:25:43 · 728 阅读 · 0 评论 -
寻找和为定值的两个数
#includeusing namespace std;bool find_num(int data[] , int length , int sum , int &first_num , int &second_num){ if(length < 1) return true; int begin = 0; int end = length原创 2014-04-14 16:55:21 · 807 阅读 · 0 评论 -
快速、冒泡、选择、直接插入C语言实现
#include//快速排序void quickSort(int a[],int left,int right){int i,j,temp;i=left;j=right;temp=a[left];if(left>right)return;while(i!=j){while(a[j]>temp&&j>i)j--;if(j>i)a[i++]=原创 2014-02-24 20:45:15 · 1185 阅读 · 0 评论 -
程序员如何快速准备面试中的算法
程序员如何快速准备面试中的算法前言 我决定写篇短文,即为此文。之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法。尽管在微博上简单梳理过,如下图所示: 但因字数限制,许多问题无法一次性说清楚,故特撰此文着重阐述下:程序员如何快速准备面试中的算法,继而推荐一些相关的书籍或资料。顺便也供节后跳槽、3月春季招聘小高潮、及6月转载 2014-02-20 16:36:26 · 1567 阅读 · 0 评论 -
冒泡排序--C语言实现
冒泡排序基本概念冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,转载 2014-02-19 21:46:47 · 785 阅读 · 0 评论 -
数据结构常考面试题
数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易。在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结构和算法都问一遍不太现实。所以,实际的情况是,企业一般考察一些看起来很基本的概念和算法,或者是一些变形,然后让你去实现。也许看起来简单,但是如果真让你在纸上或者是计算机上快速地完成一个算法,并且设计测转载 2014-02-19 21:24:56 · 1743 阅读 · 0 评论 -
快速排序详解--C语言实现
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它转载 2014-02-19 09:50:41 · 755 阅读 · 0 评论 -
数据结构--内部排序读书笔记
1如果按排序过程中依据的不同原则对内部排序方法进行分类,则大致可分为插入排序、交换排序、选择排序、归并排序和计数排序等五类。如果按内部排序过程中所需的工作量来区分,则分为3类:(1)简单的排序方法,其时间复杂度为O(n2);(2)先进的排序方法,其时间复杂度为O(nlogn);(3)基数排序,其时间复杂度为O(d.n)2.直接插入排序,时间复杂度为O(n2),方法简单适合记录数量比较小的时候。原创 2014-02-17 16:39:49 · 1203 阅读 · 0 评论 -
数据结构--快速、冒泡、选择排序C语言实现
#include//快速排序void quickSort(int a[],int left,int right){int i,j,temp;i = left;j = right;temp = a[left];if(left>right)return;while(i!=j){while(a[j]>=temp &&j>i)j--;if(j>i)原创 2014-02-21 10:39:17 · 1092 阅读 · 0 评论 -
数据结构之内部排序算法
内部排序算法 排序的基本概念: 把一组无序的数据元素按照关键字值递增(或递减)的顺序重新排列。 一、插入排序思想:将序列分为【有序段】与【无序段】两段,然后依次将【无序段】中的元素插入到【有序段】的正确位置。寻找元素应插入的位置可用【直接】和【折半】两种方式进行查找。 对应算法:直接插入排序、折半插入排序。以上两种算法的不同点:寻找插入位置转载 2014-02-17 16:36:01 · 627 阅读 · 0 评论 -
单链表基本操作
#include#include#define ERROR 0#define OK 1typedef int status;typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;} LNode,*LinkList;void Build(LinkList转载 2014-02-27 13:44:31 · 872 阅读 · 0 评论 -
C语言实现创建单链表及求长度
#include#include //malloc需要此头文件//定义单链表结点结构体typedef int ElemType;typedef struct Node{ElemType data;struct Node *next;}LNode,*LinkList;//建立一个带头结点的单链表void Build(LinkList L){原创 2014-02-27 14:38:01 · 15119 阅读 · 2 评论 -
顺序表基本操作-C语言
#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int status ;typedef in转载 2014-02-27 13:45:30 · 749 阅读 · 0 评论 -
C语言实现二分查找
#include /*binsearch : find x in v[0] int binsearch(int x, int v[], int n){ int low, high, mid; low = 0; high = n - 1; while ( low mid = (low转载 2014-02-26 09:52:35 · 708 阅读 · 0 评论 -
数据结构算法-3
3.n阶Hanoi塔问题的C函数void hanoi(int n,char x,char y,char z){//将塔座x上按直径由小到大且自上而下编号为1到n个n个圆盘按规则搬到塔座z上,y//可用作辅助塔座,搬动操作move(x,n,z)可定义为(c是初值为0的全局变量,对搬动计数)if(n==1) move(x,1,z);else {原创 2014-02-12 15:41:50 · 777 阅读 · 0 评论 -
堆排序思想
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>转载 2014-02-24 20:57:35 · 1250 阅读 · 0 评论 -
归并排序思想
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。 归并排序基本原理通过对若干个有序结点序列的归并来实现排序。所谓归并是指将若干个已排好序的部分合并成一个有序的部分。 归并排序基本思想设两个有序的子序列(相当于输入序列)放在同一转载 2014-02-24 21:22:49 · 1158 阅读 · 0 评论 -
位映射方法
//查找字符串中第一个只出现一次的字符#include#includeconst int N = 26;int bit_map[N];void findNoRepeat(char *src){ int pos; char *str=src; int i,len=strlen(src); //统计 for(i=0;i<len;i++) bit_map[str[i]-'原创 2014-04-14 19:09:32 · 1297 阅读 · 0 评论 -
字符串常考面试题
一般面试字符串的题目分四种:1, 基本运算(求长度,连接,比较)2. 格式转换(atoi, itoa) 3.字符串翻转 4. 模式匹配。1. 基本运算a. 赋值操作函数原型:int StrAssign(const char *s, char *t)函数说明:将s的内容付给t函数定义:int StrAssign(const char *s, char转载 2014-04-14 19:32:11 · 828 阅读 · 0 评论 -
各种字符串操作---可运行
网上很多字符串操作程序很难完全可运行,而且不全。通过整理得到可运行的常见字符串操作程序如下://查找字符串中第一个只出现一次的字符#include#includeconst int N = 26;int bit_map[N];void findNoRepeat(char *src){int pos;char *str=src;int原创 2014-04-14 22:13:32 · 871 阅读 · 0 评论 -
求前k个最小的数---类似快排思想的O(n)
#include#include#includeusing namespace std;int Partition(vector&data,int headId,int tailId){ int posSlow = headId-1,posFast=headId; for(;posFast<tailId;++posFast) { if(data[posFast]<data[t原创 2014-04-11 09:13:46 · 1175 阅读 · 0 评论 -
堆处理海量数据----求前k个最小的数--时间复杂度(n * log k)
通过阅读July的书籍,发现里面求前k个最小数有很多方法。但在面对处理海量数据处理的时候,不能 把全部数据都放在电脑内存中。这时用堆来处理,并把数据放在外存中,通过读取文件的方式来读取。感觉该方法十分巧妙。代码如下:#include#includeusing namespace std;void MaxHeap(int heap[],int i,int len);void Build原创 2014-04-10 20:05:11 · 1677 阅读 · 1 评论 -
各种排序算法--c++实现
#includeusing namespace std;//堆排序void FindMaxInHeap(int arr[], int size) { for (int j = size - 1; j > 0;j --) { int parent = j / 2; int child = j; if (j < s原创 2014-04-10 15:26:22 · 1317 阅读 · 0 评论 -
两个字符串包含算法
#include#includeusing namespace std;//O(n*m)的轮询方法int CompareString(string LongString,string ShortString){ int i,j; for(i=0;i<ShortString.length();i++) { for(j=0;j<LongString.length();j++)原创 2014-04-09 13:27:49 · 832 阅读 · 0 评论 -
字符串左旋--循环移位法(c++实现)
#include#includeusing namespace std;//求最大公倍数gcd算法int gcd(int a,int b){ int c; while(b>0) { c=a%b; a=b; b=c; } return a;}//旋转算法void my_rotate(string &str,int m){ int len=str.length原创 2014-04-09 11:10:21 · 1701 阅读 · 0 评论 -
字符串包含--数组存储O(m+n)
#include#includeusing namespace std;int main(){ char long_ch[]="TADBSROC"; char short_ch[]="CADS"; int i; bool store[58]; memset(store,false,58); //前两个是遍历两个字符串,后面一个是遍历数组 for(i=0;i<sizeo原创 2014-04-09 15:04:37 · 932 阅读 · 0 评论 -
两个字符串包含hashtalbe的O(m+n)
#include#includeusing namespace std;int main(){ string str1="RABDCLMORS"; string str2="ZRSD"; //开辟一个辅助数组并清零 int hash[26]={0}; int num = 0;//数组中元素个数 //扫描短字符串 for(int j = 0;j<str2.length();原创 2014-04-09 14:48:54 · 885 阅读 · 0 评论 -
计数排序详解
计数排序的基本思想是:统计一个数序列中小于某个元素a的个数为n,则直接把该元素a放到第n+1个位置上。当然当过有几个元素相同时要做适当的调整,因为不能把所有的元素放到同一个位置上。计数排序假设输入的元素都是0到k之间的整数。程序如下:对于数据2 5 3 0 2 3 0 3程序执行的过程如下图所示: 现在有个问题,若必须是0到转载 2014-04-08 17:33:22 · 769 阅读 · 0 评论 -
字符串左旋算法
#include#includeusing namespace std;//指针翻转法//方法一void rotate(string &str,int m){if(str.length() == 0 || mreturn;int n = str.length();if(m%nreturn;int p1 = 0,p2 = m;int原创 2014-04-08 13:43:54 · 1054 阅读 · 0 评论 -
全排列--字典序列、递归方法c语言实现
//字典序全排列#include int a[10],N;//首先进行排序--快速排序void qsort(int a[],int left,int right){ int i,j,temp; i=left; j=right; temp=a[left]; if(left>right) return; while(i!=原创 2014-04-19 12:18:29 · 3158 阅读 · 1 评论 -
全排列代码
#include using namespace std;templatevoid permutation(T array[], int begin, int end){ int i; cout<<"调用递归"<<endl; if(begin == end){ for(i = 0; i <= end; ++i){ cout<<ar转载 2014-04-18 17:22:10 · 725 阅读 · 0 评论 -
程序员面试攻略题3
面试经常考的常用的搜索方法有宽度优先搜索(BFS)和深度优先搜索(DFS):(1) BFS算法:将从根结点出发,按从左到右的顺序先遍历第二层,再按从左到右的顺序遍历第三层……直到遍历完所有的结点或找到你想要的结点为止。这个算法的执行时间为O(n),不适合搜索尺寸很大的树。内存开销比较大,因为它在搜索每一层的同时需要把该层结点的子结点指针全都保存起来。(2) DFS算法:将沿着树的某原创 2014-03-24 14:33:59 · 977 阅读 · 0 评论 -
动态规划
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】 求两字符序列的最长公共字转载 2014-04-17 09:56:44 · 490 阅读 · 0 评论 -
算法笔记整理
今天主要看了以下内容:1.寻找和为定值的多个数算法,以中兴面试题为例,即:输入两个整数,从数列1,2,3……n随意取几个数,使其和等于m,要求将其中所有的可能的组合列出来。使用了STL 的list结构。具体代码如下:#include #include using namespace std; listlist1; void find_factor(int sum, i原创 2014-04-15 17:01:17 · 818 阅读 · 0 评论 -
海量数据处理
海量数据处理:十道面试题与十个海量数据处理方法总结作者:July、youwang、yanxionglu。时间:二零一一年三月二十六日本文之总结:教你如何迅速秒杀掉:99%的海量数据处理面试题。有任何问题,欢迎随时交流、指正。出处:http://blog.csdn.net/v_JULY_v。 第一部分、十道海量数据处理面试题1、海量日志数据转载 2014-04-16 15:34:57 · 656 阅读 · 0 评论 -
胜者树与败者树
胜者树与败者树 胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。 不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。 胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值转载 2014-04-16 15:09:26 · 584 阅读 · 0 评论 -
直接插入排序
前言插入排序(insertion sort)的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止.直接插入排序基本思想假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n].从i = 2起直到i = n 为止,依次将R[i]插入当前的有序区R[1..i - 1]中,生成含转载 2014-02-23 21:12:42 · 622 阅读 · 0 评论 -
数据结构算法-1
Void union(List &La,List Lb)//将所有在线性表Lb中但不在La中的数据元素插入到La中 { La_len = ListLength(La);Lb_len =ListLength(Lb);//求线性表的长度 For(i= 1;i { GetElem(Lb,i原创 2014-02-10 17:32:03 · 1054 阅读 · 0 评论 -
数据结构算法—2
12.将两个有序链表并为一个有序链表void MergeList_L(LinkList &La,LinkList&Lb,LinkList &Lc){//已知单链线性表La和Lb的元素按值非递减排列,归并La和Lb得到新的单链线性表//Lc,Lc的元素也按值非递减排列pa = La->next; pb = Lb->next;Lc = pc =La; //用La的头结点作为原创 2014-02-11 11:06:29 · 1030 阅读 · 0 评论 -
c++ 重载 覆盖与隐藏
成员函数的重载、覆盖与隐藏成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。8.2.1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与转载 2013-08-12 09:07:34 · 660 阅读 · 0 评论