C++
文章平均质量分 58
若海音符
愿每一份努力都被赏识!
展开
-
C++内存泄露
C++中的内存泄露一般指堆中的内存泄露。堆内存是我们手动malloc/realloc/new申请的,程序不会自动回收,需要调用free或delete手动释放,否则就会造成内存泄露。内存泄露其实还应该包括系统资料的泄露,比如socket连接等,使用完后也要释放。内存泄露的原因:总结下来,内存泄露大概有一下几个原因:1、编码错误:malloc、realloc、new申请的内存在转载 2016-09-02 09:20:48 · 525 阅读 · 0 评论 -
C++类中this指针的理解
转自:http://blog.csdn.net/feiyond/article/details/1652505先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具原创 2016-05-04 16:29:52 · 3037 阅读 · 0 评论 -
循环链表双向链表
单链表:将单链表中的终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾想接的单链表称为单循环链表,简称循环链表。其实循环链表和单链表的主要差异在于循环的判断条件上,原来是判断p->next是否为空,现在则是判断p->next是否等于头结点,则表示循环结束改造单链表,不用头指针,而是用指向终端结点的尾指针来表示循环链表,此时查找结束结点和头结点都很方便。将两个循环原创 2016-04-19 22:16:52 · 368 阅读 · 0 评论 -
静态链表
用数组描述的链表叫做静态链表优点:在插入和删除的时候,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点缺点:没有解决连续存储分配带来的表长难以确定的问题,失去了顺序表存储结构随机存取的特性#include "string.h"#include "ctype.h" #include "stdio.h" #includ原创 2016-04-19 21:50:04 · 346 阅读 · 0 评论 -
线性表
1.线性表:零个或多个数据元素的有限序列2,线性存储定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。既然线性表的每一个数据元素的类型都相同,所以可以用一维数组来实现顺序存储结构。顺讯存储结构有三个属性:存储空间的起始位置,线性表的最大存储量,线性表的当前的长度3.数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的。线性表的长度是线性表中原创 2016-04-19 13:59:54 · 374 阅读 · 0 评论 -
树,森林与二叉树的转换
1.树转换为二叉树树中每个节点最多只有一个最左边的孩子(长子)和一个右邻的兄弟 1)在所有兄弟节点之间加一连线 2)每个节点,除了保留与其长子之间的连线外,去掉该节点与其它孩子的连线3)层次调整。以树根点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。这样结点的左孩子还是之前的左孩子,右孩子是之前的兄弟结点2.森林转化为二叉树1)把每棵树转换为二叉树。2原创 2016-04-26 10:21:09 · 1030 阅读 · 0 评论 -
快速排序
#includeusing namespace std;int Partition(int *num,int low,int high){ int pivot=num[low]; while(low<high){ while(low=pivot) high--; num[low]=num[high]; while(low<high && num[low]<=pivot原创 2016-04-07 21:39:25 · 314 阅读 · 0 评论 -
归并排序
时间复杂度:O(nlogn)由于归并排序过程中,需要与原始记录序列相同数量的存储空间存放归并结果以及递归的深度为logn的栈的空间,因此空间复杂度为O(n+longn)归并排序是一种比较占内存,但是效率高且稳定的排序算法/* 归并排序********************************** *//* 将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..原创 2016-05-03 20:14:43 · 304 阅读 · 0 评论 -
算法
1.算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每一条指令表示一个或多个操作2.算法有5个基本特性:输入、输出、有穷性、确定性和可行性 输入和输出:算法具有零个或多个输入,至少有一个或多个输出,输出形式可以是打印输出也可以是返回 有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。又穷的概念和数学上的原创 2016-04-19 11:53:51 · 357 阅读 · 0 评论 -
数据结构绪论
1.数据结构是相互之间存在一种或多种特定关系的数据元素的集合2.数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科3.数据的概念:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。(可以看出数据有两个前提:可以输入计算机中,能被计算机程序处理)4.数据元素:是组成数据的、有一定意义的基本单位,在原创 2016-04-19 10:33:51 · 340 阅读 · 0 评论 -
插入排序
#includeusing namespace std;//插入排序void InsertSort(int *num, int len){ int i,j; for(i=1; i<len; i++){//依次将num1-(n-1)插入到前面已经排序好的队列中 if(num[i]<num[i-1]){//若当前的数据小于前去,插入到前面的排序中 int temp=num[原创 2016-04-07 20:23:50 · 325 阅读 · 0 评论 -
选择排序
选择排序我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。时间复杂度O(n*n),空间复杂度O(1);#includeusing namespace std;//选择排序void SelectSort(int *num, int len){ int原创 2016-04-07 21:12:44 · 246 阅读 · 0 评论 -
冒泡排序
时间复杂度O(n2),空间复杂度O(1),稳定的排序算法#includeusing namespace std;//正宗的冒泡排序 void BubbleSort(int *num,int len){ for(int i=0;i<len;i++){ for(int j=len-2;j>=i;j--){ if(num[j]>num[j+1]){//若前者大于后者原创 2016-05-02 20:17:42 · 351 阅读 · 0 评论 -
排序
1.排序的稳定性 假设Ki=Kj(02.内排序和外排序根据在排序的过程中,待排序的所有记录全部被放置在内存中。外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行3.排序算法的性能主要受3个方面影响 1)时间性能:尽可能少的关键字比较次数和尽可能少的记录移动次数 2)辅助空间 3)算法的复杂性原创 2016-05-02 20:00:20 · 370 阅读 · 0 评论 -
leetcode-74. Search a 2D Matrix
74. Search a 2D Matrix My SubmissionsQuestionEditorial SolutionTotal Accepted: 77864 Total Submissions: 230283 Difficulty: MediumWrite an efficient algorithm that searches for a原创 2016-05-02 17:59:52 · 374 阅读 · 0 评论 -
拓扑排序
1424. 奖金ConstraintsTime Limit: 1 secs, Memory Limit: 32 MB Description 由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。 于是Mr.Z下令召开m方会谈。原创 2016-05-02 16:51:57 · 575 阅读 · 0 评论 -
各个排序算法的总结
1.根据在排序的过程中,待排序的所有记录全部被放置在内存中,排序分为内排序和外排序。 内排序是在排序的整个过程中,带排序的所有记录全部放置在内存中。外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。2.内排序的分类.3从算法的简单性来划分简单算法:冒泡、简单选择、直接插入改进算法:快排、堆排序、希尔排序、归并排序原创 2016-05-16 15:33:51 · 293 阅读 · 0 评论 -
希尔排序
时间复杂度O(n2),空间复杂度O(1)不稳定#includeusing namespace std;//希尔排序void ShellSort(int *num, int len){ int dk,i,j; for(dk=len/2; dk>=1; dk/=2){ for(i=dk; i<len; i++){ if(num[i]<num[i-dk]){原创 2016-04-07 20:58:47 · 361 阅读 · 0 评论 -
堆排序
1,。将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走,其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值。然后再将剩余的n-1个序列重新构建一个堆。这样就会得到n个元素中次大值。如此仿佛执行,便能得到一个有序的序列2.时间复杂度O(nlongn),由于记录的比较与交换是跳跃式进行,因此堆排序也是一种不稳定的排序算法。初始构建堆所需要的比较次数较多,因此原创 2016-05-03 19:03:45 · 393 阅读 · 0 评论 -
原地归并排序
原地归并排序原地归并排序不需要辅助数组既可以归并。关键在于merge函数。假设有两段递增的子数组arr[begin...mid-1]和arr[mid..end].但是整个数组不是递增的。其中i=begin,j=mid,k=end第一步:i往后移动,找到第一个arr[i]>arr[j]的索引,假设数组元素如下图所示,图中arr[i]=2,则i经过此步骤之后指向arr[5]原创 2016-08-10 12:51:36 · 605 阅读 · 0 评论 -
函数重载
1.C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以。这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。2.实例//参数类型不同 int max(int a,int b,int c);double max(double a,double b,double c);//参数个数不同 int max(int a,int b,原创 2016-08-28 17:49:04 · 473 阅读 · 0 评论 -
结构体和类的区别
结构体和类的区别1.C的结构体和C++结构体的区别1.1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。1.2 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。1.3 C语言的结构体是不可以继承的,C++的结构体是可以原创 2016-07-07 16:42:17 · 309 阅读 · 0 评论 -
输入与输出
在C++程序中,输入与输出可以看做是一连串的数据流,输入即可视为从文件或键盘中输入程序中的一串数据流,而输出则可以视为从程序中输出一连串的数据流到显示屏或文件中。在编写C++程序时,如果需要使用输入输出时,则需要包含头文件 。在 中定义了用于输入输出的对象,例如常见的 cin 表示标准输入、cout 表示标准输出、cerr 表示标准错误。使用 cout 进行输出时需要紧跟“>”操原创 2016-07-07 21:43:07 · 433 阅读 · 0 评论 -
引用Reference
用(Reference)是C++相对于C语言的又一个扩充。引用类似于指针,只是在声明的时候用 & 取代了 *。引用可以看做是被引用对象的一个别名,在声明引用时,必须同时对其进行初始化。引用的声明方法如下:类型标识符 &引用名 =被引用对象例一int a = 10;int &b = a;cout<<a<<" "<<b<<endl;cout<<&a<<" "<<&b<<end原创 2016-07-12 16:07:21 · 411 阅读 · 0 评论 -
树的存储结构
1.双亲表示法 在每一个结点中,附设一个指示器指示双亲在数组中位置。2.孩子表示法 使用多重链表。每一个结点有多个指针域,其中每一个指针指向一棵子树的根结点,我们把这种方法叫做多重链表法。把每一个结点的孩子结点排列起来,以单链表做存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空。然后n个指针又组成一个线性表,采用顺序存储结构,存放进一个一维数组中3.孩子兄弟原创 2016-04-24 22:16:26 · 303 阅读 · 0 评论 -
树
1.树的定义:树(tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空的树: (1)有且仅有一个特定的称为根root的结点 (2)n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,....Tm,其中每一个集合本身又是一棵树,并且成为根的子树subtree2.结点分类 结点拥有的子树数称为结点的度。度为0的结点称为叶结原创 2016-04-24 21:47:16 · 308 阅读 · 0 评论 -
串
1.串(string)是由零个或多个字符组成的有限序列2.子串与主串:串中任意个数的连续字符组成的子序列称为该串的子串。相应的,包含子串的串称为主串。3.KMP#includeusing namespace std;void nextArray(int *next,string pattern){ next[0]=-1; int j=0,k=-1; int len=pat原创 2016-04-24 20:51:27 · 342 阅读 · 0 评论 -
栈的顺序存储结构
1.队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表2.队列是一种先进先出FIFO的线性表。3.循环队列,我们把队列的这种头尾相接的顺序存储结构称作循环队列 rear==font,队列为空 当队列满的时候,我们修改其条件,保留一个空元素,所以此时队列满的条件是(rear+1)%QueueSize==font; 队里的长度:(rear-font+Q原创 2016-04-24 11:49:10 · 342 阅读 · 0 评论 -
栈的运用-四则运算表达式求值
分为两步1.将中缀表达式转化为后缀表达式(栈用来进出运算的符号)规则:从左到右遍历中缀表达式中的每一个数字和符号,若是数字就直接输出,即成为后缀表达式的一部分;若是符号,则判断其余栈顶的符号的优先级,是右括号或者优先级不高于栈顶符号的优先级,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式string middleToLast(string middle){ st原创 2016-04-24 11:10:20 · 503 阅读 · 0 评论 -
栈的运用
1.在程序设计语言中实现了递归。我们把一个直接用自己或者通过一系列的调用语句间接调用自己的函数,称作递归函数。写递归程序最怕的就是陷入用不结束的无穷递归中。所以,每一个递归定义至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出。2.递归和迭代的区别迭代使用的是循环结构,递归使用的是选择结构。递归能使程序的结构更加清晰、更简洁、更容易让人理解,从而减少读懂代码的时间。但是大量的原创 2016-04-22 21:36:13 · 373 阅读 · 0 评论 -
栈的链式存储结构及实现
栈的链式存储结构,简称链栈1.链栈不需要头结点。空的链栈就是top==null2.对比一下顺序栈与链栈,它们在时间复杂度上是一样的,均为O(1)。对于空间性能,顺序栈需要实现确定一个固定的长度,可能会存在内存空间浪费的问题,但它的优势是存取时定位比较方便,而链栈则要求每个元素都要有指针域,这同时也增加了一些内存开销,但对栈的长度没有限制。如果栈的使用过程中元素变化不可预料,又是很小,有时非原创 2016-04-22 21:10:31 · 587 阅读 · 0 评论 -
栈的顺序存储结构
1.栈的定义:栈是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶,另一端称为栈底,不包含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称LIFO结构。自定义栈:#includeusing namespace std;const int MAX_SIZE=20;typedef struct { int data[MAX_SIZE]; int原创 2016-04-22 20:46:29 · 437 阅读 · 0 评论 -
有序表查找(二分查找,插值查找,斐波那契查找)
1.二分查找//二分查找非递归 int Binary_Search1(int *num, int len,int target){ int low=0,hight=len-1,mid; while(low<=hight){ mid=(low+hight)/2; if(num[mid]==target) return mid; else if(num[mid]>targe原创 2016-05-17 20:18:19 · 643 阅读 · 0 评论 -
归并排序
时间复杂度:O(nlogn)由于归并排序过程中,需要与原始记录序列相同数量的存储空间存放归并结果以及递归的深度为logn的栈的空间,因此空间复杂度为O(n+longn)归并排序是一种比较占内存,但是效率高且稳定的排序算法#includeusing namespace std;const int MAX=100;void Merge(int *src,int start,int原创 2016-05-16 21:49:29 · 305 阅读 · 0 评论 -
最短路径-Dijkstra
1031. CampusConstraintsTime Limit: 1 secs, Memory Limit: 32 MB DescriptionAt present, Zhongshan University has 4 campuses with a total area of 6.17 square kilometers sitting respectively on原创 2016-05-02 15:17:26 · 366 阅读 · 0 评论 -
二分查找的递归与非递归
#includeusing namespace std;//二分查找非递归 int Binary_Search1(int *num, int len,int target){ int low=0,hight=len-1,mid; while(low<=hight){ mid=(low+hight)/2; if(num[mid]==target) return mid;原创 2016-04-07 20:02:18 · 344 阅读 · 0 评论 -
Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.struct ListNode { int val; ListNode *next; ListN原创 2016-03-14 10:48:24 · 279 阅读 · 0 评论 -
Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with原创 2016-03-14 10:45:42 · 297 阅读 · 0 评论 -
Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are all va原创 2016-03-12 18:50:44 · 329 阅读 · 0 评论 -
Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the原创 2016-03-12 18:06:07 · 391 阅读 · 0 评论