![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
xyy_496
这个作者很懒,什么都没留下…
展开
-
数据结构——数组(1)数组求和&打印二维数组&判断数组是否递增
数组求和方法一:直接一次for循环int GetSum1(int *a,int n){ int sum=0; for (int i=0; i<n;i++) { sum+=a[i]; } cout<<"for循环数组求和: sum="<<sum<<endl; return 0;}...原创 2018-07-23 16:05:55 · 339 阅读 · 0 评论 -
数据结构——字符串(3)字符串单词数量&&字符串逆序
使用字符数组保存字符串,进行操作。/************************************************************************//* 刷题:字符串相关题目 *//*************************************...原创 2018-08-04 16:32:30 · 149 阅读 · 0 评论 -
数据结构——栈(1):限定性线性表(先进后出)
1、栈的定义2、栈顶顺序存储结构3、共享空间栈4、栈的链式存储结构原创 2018-08-05 13:26:30 · 1289 阅读 · 1 评论 -
数据结构——队列
1.定义队列(queue)是只允许在一端进行插入操作、另一端进行删除操作的线性表。先进先出,插入端为队尾;删除端为队头。 队列作为一种特殊的线性表,也具有顺序结构和链式结构2.循环队列循环队列:队列的头尾相接的顺序存储结构称为循环队列。使用循环队列是为了避免队列空间浪费、插入删除之后队头队尾指针操作不便等情况。 循环队列的顺秀结构如下://循环队列的顺序存储结构typed...原创 2018-08-06 11:37:15 · 219 阅读 · 0 评论 -
数据结构——链表(5)数组转换为链表&&单链表冒泡排序
1.数组转换为链表结构,主要思想可以按照头插法或尾插法,要手动生成一个新的结点,分配存储空间,然后按照顺序,将数组中对应的元素放在链表对应的数据区。/* 用数组创建链表 */Linklist ArrayToList(int *arr,int len){ Linklist head=NULL; int data; Linklist pCurrent...原创 2018-08-01 22:09:30 · 1693 阅读 · 1 评论 -
剑指offer面试题1——类中的赋值运算符函数
题目:类型CMyString的类声明中,为该类型添加赋值运算符函数。解题思路: 1.赋值运算符函数:是一种重载运算符。本质上也是一种函数。因此,有函数对应的特性:返回值、函数名、形参列表。class CMyString{public: CMyString(char* pData=nullptr); CMyString(const CMyString&amp; st...原创 2018-08-14 17:03:08 · 292 阅读 · 0 评论 -
剑指offer面试题3——找到数组中重复的数
题目: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路: 方法一:两个for循环,用vector存储重复的数,可输出所有数字和重复次数。时间复杂度O(n^2) 方法二...原创 2018-08-14 22:31:36 · 317 阅读 · 0 评论 -
数据结构——树
1、树的基本定义1、树的定义:n个结点的有限集合(n>=0)。 2、树的结点:包含1个数据元素及若干指向其子树的分支。 3、结点的度:结点所拥有的子树数量。 4、树的度:树中所有结点的度的最大值。 5、结点的层次:从根节点开始为第一层 6、树的深度:最大的层次数。/2、二叉树(Binary Tree)1、二叉树:n个结点的有限集合(n>=0)。特殊在于:n>...原创 2018-08-07 15:41:55 · 234 阅读 · 0 评论 -
数据结构——链表(6)循环链表
循环链表是一种首尾相连的链表。 和单链表的区别在于对尾结点的处理:①单链表的尾结点指向空,而循环链表的尾结点指向头结点(或第一个结点)。 ②单链表的局限是只能从头开始遍历链表;而循环链表可以从表中的任意一个位置开始遍历整个链表。 ③单链表一般使用头指针head操作;循环链表通常使用尾指针rear标识链表,这样在链表尾部进行处理的时候使用rear指针效率较高。对于两个循环链表,在合并成一个...原创 2018-08-02 22:22:22 · 311 阅读 · 0 评论 -
数据结构——字符串(1)
1、串(string)的定义:是由0个或多个字符组成的有限序列,一般叫字符串,记为s=”“(空串),s=”c1c2c3……cn”(长度为n的串)。 2、串的存储区结构 串的存储结构和线性表一样,也分为两种:顺序存储和链式存储。 (1)串的顺序存储结构:一般保存在固定长度的数组中,数组下标从0开始,最后一位保存字符串结束标志“\0”。 (2)串的链式存储结构:一个结点元素存放一个字符,或...原创 2018-08-03 11:05:56 · 429 阅读 · 0 评论 -
数据结构——字符串(2)串的模式匹配
1、定义:子串的定位操作称为串的模式匹配。 比如:主串S=”goodgoogle”;子串T=”google”;找到子串T的位置就是一个匹配。 实现方法: 从主串第一位开始遍历,直到匹配成功或者遍历结束。2、KMP模式匹配法:设置一个数组next[]。可避免朴素模式匹配的冗余回溯。 一般,next[0]=0;无重复,next[j]=1;若前缀和后缀重复,有n个字符相等,next[j]= n...原创 2018-08-04 16:27:36 · 495 阅读 · 0 评论 -
数据结构——链表(4)如何寻找到单链表中间的结点【特殊的找第k个结点的方法】
方法一:首先遍历一次,求得单链表长度len,然后再遍历一次,找到(len+1)/2的中间位置。方法二:和找第k个结点类似,但是因为是中间结点,又有一定的特殊性。定义两个结点指针p和q,最开始都表示头指针,然后,p每次移动一位,q每次移动两位;当q移到最后一个结点时,p结点就在中间位置。 具体代码实现如下:#include <stdlib.h>#include<iost...原创 2018-07-30 23:02:31 · 377 阅读 · 0 评论 -
数据结构——链表(3)实现单链表反转
1.单链表反转,可以不使用头结点。 2.初始化阶段:p=L(当前正序链表的第一个结点); pHead=NULL,返回逆序反转链表的头结点; pPrev=NULL,保存p的前一个结点,初始化为NULL,之后随着往后反转,保存已反转部分的第一个结点。 3.从正序链表的第一个结点开始,若当前结点p不为空,①保...原创 2018-07-27 10:38:27 · 631 阅读 · 0 评论 -
数据结构——数组(2)在有序数列中二分查找
二分查找的前提要求数组有序,查找思想:每次将待查找元素k和数组中间位置mid元素对比,若相等,则查找成功;若mid元素小于k,则k在数组后半部分;若mid元素大于k,则在数组前半部分。然后继续以此方法搜索。实现方法包括:非递归法、递归法。#include <stdlib.h>#include <iostream>using namespace std;#d...原创 2018-07-23 17:04:43 · 707 阅读 · 0 评论 -
数据结构——数组(3) 在有序数组中找出重复的次数最多的数
先总结有序数组,无序的后面再总结。。 1.以空间换时间法。 算法思想:目标数组array[length],是一个有序数组,比如int array[]={1,1,2,2,4,4,4,4,4,5,5,6,10};总共有13个元素,其中数字最多的数是4,总计5次。 因此,额外定义一个数组count[length],并将该数组初始化为0。然后,使用count[array[i]]++操作,统...原创 2018-07-23 22:19:23 · 3386 阅读 · 0 评论 -
数据结构——数组(4)以O(n)时间复杂度,找出数组中出现次数超过一半的数
构建二维数组法:时间和空间复杂度都大,不合题意。 先对数组排序,再取中间元素的方法,最快的排序算法时间复杂度为O(logn),不合题意。 因此,需要采用其他的一些技巧实现。方法一:由于目标数字,在数组中出现的次数超过一半。那么,若每次都取出其中两个不同的数,最后剩下的必然为出现次数最多的数。 该方法避免排序,且时间复杂度为O(n)。#include <stdlib.h>...原创 2018-07-24 10:35:09 · 252 阅读 · 0 评论 -
数据结构——数组(5)找出数组中唯一重复的数(元素范围1~1000)
这个题目本身就有一定局限性。比如,对于数组a[10001],其中,1000个数就是1~1000的每个数,可以任意排列,然后再多一个重复的数。题目就是怎么求出这个特殊的重复的数。 这一类问题的解决思路主要有以下几种: 方法一:先求和,再相减。即数组元素值求和,然后数组下标求和,然后二者相减,即可得到重复的数。void xor_findDup1(int *a,int len){ in...原创 2018-07-24 15:26:35 · 741 阅读 · 0 评论 -
数据结构——数组(6)将数组后面m个数移动为前面的m个数
思路: 以a[]={1,2,3,4,5,6,7,8,9,10}为例,m=5。即把前后分别5个数换位置 ①将前面5个数的顺序颠倒,得:5,4,3,2,1,6,7,8,9,10 ②将后面5个数的顺序颠倒,得:5,4,3,2,1,10,9,8,7,6 ③将整个数组的顺序颠倒,得: 6,7,8,9,10,1,2,3,4,5 使用递归法即可实现。void Diaotou(int *a,i...原创 2018-07-24 22:27:42 · 604 阅读 · 0 评论 -
数据结构——数组(7)判断一个整数x是否可以表示为n个(n>=2)的连续整数之和
思路:假定x=m+(m+1)+……+(m+n-1),其中,m表示最小的数字,总共为从m开始,连续的n个数。 则x=n(2m+n-1)/2。对该等式进行变换,可得m=x/n - (n-1)/2,且m>=1,m等式的分子必须是2的整数倍。这样才能是连续整数。代码实现如下:bool IsSumOfContinue(int x,int n){ int start=0,end=0,...原创 2018-07-25 09:26:55 · 408 阅读 · 0 评论 -
大话数据结构学习(1)线性表的顺序存储结构
1.线性表定义:0个或多个数据元素的有限序列。 2.线性表的顺序存储结构:是指用一段地址连续的存储单元依次存储线性表的数据元素。 3.线性表的顺序存储结构通常可借助数组实现。 注意:①一般,数组长度固定;线性表长度可变。因此,用数组存放线性表数据时,定义的数组大小要大于等于线性表长度。②线性表中的元素从1开始数,数组下标从0开始,因此,数组a[0]存放线性表的第1个数,同理,a[i]存放第i...原创 2018-07-25 15:34:53 · 228 阅读 · 0 评论 -
大话数据结构学习(2)线性表的链式存储结构
1、线性表的链式存储结构:n个结点(结点存数据元素和后继元素的指针),链接为一个链表,即为线性表(a1,a2,……,an)的链式存储结构。 2、链式存储结构的头指针:①头指针是链表的必要元素!!无论链表是否为空,头指针均不为空。②头指针有标识作用,通常用来标识链表名。③头指针指向链表的第一个结点(头结点或第一个结点)。 3、头结点:①头结点不是必须的。②头结点是为了第一个元素前的插入或删除和后...原创 2018-07-25 22:44:37 · 177 阅读 · 0 评论 -
数据结构——链表(1)如何找出链表中的倒数第k个元素
方法一:①遍历链表,得到链表的长度n的值;②将倒数的k的序号转换到顺序排号(n-k+1);③遍历链表,直到找到第(n-k+1)个元素。时间复杂度为O(n)。 方法二:从第一个元素开始,遍历k个元素,判断呢是否为NULL,若为空,则找到第k个元素。时间复杂度为O(kn)。 方法三:设置两个指针,第二个比第一个先往后移动k-1步(因为包含头结点)。则这两个指针之间的距离刚好为k。那么,当第二个指针...原创 2018-07-26 18:01:39 · 1525 阅读 · 0 评论 -
数据结构——链表(2)链表元素顺序输出
要想输出链表,首先要有一个链表。那就要初始化,然后添加元素,再依次遍历即可。#include <stdlib.h>#include<iostream>typedef int ElemType;struct Node{ ElemType data; struct Node *next;};typedef struct Node Node;...原创 2018-07-26 22:37:13 · 5208 阅读 · 0 评论 -
数据结构——树(2)——线索二叉树
注意各种关键词: 1、线索:指向前驱和后继的指针成为线索。 2、线索链表:加上线索的二叉链表为线索链表。 3、线索二叉树:加上线索的二叉树。 4、线索化:对二叉树以某种次序遍历,使其变为线索二叉树的过程,被称作是线索化。 5、树、二叉树、森林等的相互转换 6、赫夫曼树:带权路径最小的二叉树。 7、赫夫曼编码(应用:压缩和解压缩技术)。 主要参考:大话数据结构、及博客https://...原创 2018-08-08 16:28:00 · 230 阅读 · 0 评论