自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(23)
  • 收藏
  • 关注

原创 二维数组中的查找

一、题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、代码:#include<iostream>using namespace std;#include<cassert>bool Find(int* arr,int row,int col,int n){

2017-04-30 14:46:42 298

原创 动态顺序表的实现(c语言版本)

一、前面实现的静态顺序表,虽然看起来也能储存数据,对表中数据进行管理;不过它是用大小固定的数组储存数据的;当数据太少的时候,空间用不完,浪费内存;当数据太多的时候;又会面临内存不足的麻烦;所以,静态顺序表不是很好;除非我们提前知道要储蓄管理的数据个数;要不然一定会面临空间用不完浪费或者空间太少不够用的情况;接下来;我们实现一个动态的顺序表;动态顺序表的底层实现是一个指向某个动态内存的指针;我们根据存

2017-04-27 22:32:31 558

原创 静态顺序表的实现(C语言版)

前言:学习数据结构的框架: 一、线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。我们说“线性”和“非线性”,只在逻辑层次上讨

2017-04-27 21:18:21 3034

原创 string类的简单实现(写时拷贝Copy-on-write)

前言:上一篇文章实现了string的深拷贝写法;那我们能不能用浅拷贝写string类呢?当然可以; 一、 (1) 当我们需要对拷贝之后的对象进行修改时,采用深拷贝的方式; 如果不需要修改,只是输出字符串的内容时,或者是当偶尔修改的的时候,我们再采用深拷贝的方法;对于这两种情况,我们在实现拷贝构造函数时采用浅拷贝的方式。在采用浅拷贝的方式以后,那么两个对象的成员变量指针指向同一块字符串空间;根据

2017-04-23 22:26:52 1268 3

原创 string类的简单实现(深拷贝,浅拷贝)

一、前言▶在c语言中我们来描述一个字符串是用const char* p=”abcdef”;然后我们也学习了许多关于字符串的操作函数。 ▶那么,在学习了面向对象的c++语言之后,我们可以定义一个字符(string),这个类可以定义一个字符串对象;并且可以对该对象内存储的字符串进行各种操作; ▶接下来,我们模拟实现一个简单的string类;只需要实现★构造,★拷贝构造和★赋值运算符重载★析构

2017-04-23 20:44:54 6472

原创 二叉树面试题(二)---求一颗二叉树的镜像

一、二叉树的镜像就是一个树在镜子里的成像;好吧!初中的物理知识来了,哈哈,其实很简单,采用递归的方法求二叉树的镜像: (1)如果树为空,直接返回NULL; (2)如果树不为空,求其左子树和右子树的镜像,递归完成后,将左子树的镜像放在根结点的右边,将右子树的镜像放在根结点的左边; 二、图说 三:代码实现#include<iostream>using namespace std;#inc

2017-04-20 11:24:56 542

原创 二叉树面试题(一)---判断两个二叉树结构是否相同

一、首先这个问题是判断二叉树的结构是否相同,所以这就和二叉树的数据的值无关。只需要判断结构;判断两个二叉树的结构是否相同很简单。 采用递归的思想: (1)如果两棵二叉树都为空,返回真 (2)如果两棵二叉树一棵为空,另一棵不为空,返回假 (3)如果两棵二叉树都不为空,则递归判断其对应的左子树和右子树结构是否相同,如果都相同返回真,其他返回假 二、代码实现#include<iost

2017-04-19 23:17:59 9177

原创 稀疏矩阵的压缩储存,稀疏矩阵的普通转置,稀疏矩阵的快速转置

前言:什么是稀疏矩阵: 一个M*N(即M行N列)的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。 例如:一个6行5列的稀疏矩阵(M = 6,N = 5) 1, 0, 3, 0, 5 0, 0, 0, 0, 0 0, 0, 0, 0, 0 1, 0, 3, 0, 5 0, 0, 0, 0, 0 0, 0, 0, 0, 0 一、稀疏矩阵的压缩储存

2017-04-18 23:27:48 1226

原创 对称矩阵的压缩储存

一、存储矩阵用一个二维数组即可; 二、什么是对称矩阵: 设一个N*N的方阵A,A中任意元素Aij,当且仅当 Aij == Aji(0 <= i <= N-1&& 0 <= j <= N-1),则矩阵A是对称矩阵。以矩阵的对角线为分隔,分为上三 角和下三角 三、对称矩阵的压缩储存: 压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存储n(n+1)/2个数据(相当于1+2+

2017-04-18 18:11:25 10409

原创 用C语言模拟实现c++的继承与多态特性

一、我们知道,C语言是一种面向过程的编程语言,而C++是一款在它的语法基础上改进的面向对象的编程语言 (1)面向过程与面向对象的区别: ①从设计方法角度看: ▶面向过程程序设计方法是用函数(即算法过程)对数据进行操作,但又将函数与其操作的数据分离开来。 ▶面向对象程序设计方法是将对象的属性数据和对属性数据的操作封装在一起,作为一个整体来处理。 ②从维护角度看: ▶面向过程程

2017-04-17 23:37:03 615

原创 栈和队列的面试题(五)---判断元素出栈、入栈顺序的合法性

题目: 如:入栈的序列(1,2,3,4,5),出栈序列为 (4,5,3,2,1)是合法序列, 入栈的序列(1,2,3,4,5),出栈序列为(1,5,3,2,4)是不合法序列一:判断元素出入栈的合法性,意思就是入栈的每个元素当出栈的时候,都遵守出栈的顺序,即就是入栈的最后一个元素就是出栈的第一个元素; 如何判断元素出入栈的合法,其实很简单,每次我们根据入栈顺序,每次给一个栈

2017-04-17 14:38:40 1999 1

原创 栈和队列的面试题(四)---用两个栈实现一个队列

一:前面讲了用两个队列实现一个栈;接下来就是使用两个栈实现一个队列 了; 其实说白了;栈和队列的相互实现,就是利用一个的特点实现另一个的特点; 使用两个栈实现一个队列,即就是用两个“先进后出”的栈实现一个“先进先出”的队列。而且队列可以取队头的元素,就是第一个进去的元素;而栈只能取栈顶的元素,也就是最后一个元素;①进行pop操作(删第一个元素) 定义了两个栈S1和S2,S1为主栈,S

2017-04-17 00:21:20 1378

原创 栈和队列面试题(三)---用两个队列实现一个栈

一:queue是一种”先进先出”的数据结构,他在对尾插入元素,在队头删除元素,他既可以取到自己的队头元素,也可以取到自己的队尾元素; stack是一种”先进后出”的数据结构,他对元素的插入和删除都是在栈顶完成的;他不可以取自己栈底的元素;只能去取自己栈顶的元素; 所以用两个队列实现一个栈,就是用队列”先进先出“的原则实现栈“先进后出”特点: 所以只要实现栈的插入,

2017-04-16 00:48:07 1975

原创 实现一个返回最小值的栈

一、 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作) 的时间复杂度为O(1) (1)栈的基本操作入栈(push);出栈(pop);查找栈顶(top);栈的元素个数(size);检查栈是否为空(empty);我们知道入栈(push)和出栈(pop)时间复杂度本身就为O(1);所以只要让Min(返回最小值操作)的时间复杂度为O(1)即可; (2)Min(返回最小值操

2017-04-15 23:01:56 1372

原创 模拟实现queue

一:queue在头文件中声明。queue是一个适配器类,底层类默认为deque。 它不允许随机访问队列元素,甚至不允许遍历队列。 queue的特点是✔先进先出,可以将★元素添加到队尾,★查看队尾和★队首的元素的值,★检查元素数目和★测试队列是否为空。 二:代码实现:#include <iostream>using namespace std;#include

2017-04-13 00:41:15 584

原创 模拟实现stack

一、stack是一种序列式容器,他的特点是先进后出,只能在栈顶对元素进行压栈和出栈操作; 模拟是实现stack,要实现★栈的判空,★求栈中元素个数,★压栈和★出栈操作,★返回栈顶元素等; 二:程序代码:#include <iostream>using namespace std;#include <cassert>#include<cstdlib>template<class

2017-04-13 00:05:44 711

原创 栈和队列面试题(一)---一个数组实现两个栈

一,用一个数组实现两个栈(先进后出),有以下几种方法: ①数组的奇数位置存储一个栈的元素,偶数位置存储另一个栈的元素; ②两个栈分别从数组的中间向两头增长; 数组的中间位置看做两个栈的栈底,压栈时栈顶指针分别向两边移动,当任何一边到达数组的起始位置或是数组尾部,则开始扩容 ③两个栈分别从数组的两头开始增长。 将数组的起始位置看作是第一个栈的栈底,将数组的尾部看作第二个栈的栈底, 压栈时,栈顶指针

2017-04-12 22:55:03 3241

原创 二叉树的递归实现(前序,中序,后序,层序,高度,叶子节点数,第k层节点数)

一:二叉树是我们学过最常用也是最基础的数据结构,要想学好二叉树①首先要学会利用含有非法值得数组前序遍历★建立一颗二叉树;②然后我们要会用递归的方式对这颗二叉树进行★前序,★中序,★后序的遍历打印,也要学会利用队列的先进先出的原则对着棵树进行★层序访问;③然后我们还要知道这颗二叉树的基本信息;比如,★二叉树的总节点个数,★二叉树的叶子节点个数,★二叉树的第k层的节点个数,★二叉树的高度(深度); 二

2017-04-12 17:45:14 926 1

原创 非递归实现二叉树的前序,中序,后序遍历打印

前言:前面这篇文章主要是用递归的思想写了一颗二叉树,其中包括前序建树;前序,中序,后序遍历打印,层序遍历(非递归);求高度;求节点数;求叶子节点数;求第k层结点树等;详情请看: 递归实现二叉树的前,中,后序打印在我们了解了最简单的递归遍历以后,现在来说说用栈辅助,非递归实现二叉树的前序,中序,后序遍历打印 一:非递归实现前序遍历打印 1. 前序遍历,访问的顺序为根->左->右; 2. 前

2017-04-12 17:40:08 4749

原创 Linux下实现进度条

1.进度条在生活中很常见,在linux系统中实现一个进度条的程序,感觉还是很有趣的2.首先,进度条的动态是利用人们的视觉效果产生的,其实并不是像我们看到的那样,每次给后增加一个进度条,而是一个覆盖输出的过程;先输出:[=                                               ]表示进度是1%,刷新之后再输出:[==

2017-04-11 11:06:34 459

原创 linux下的粘贴位

1.            通常情况下,我们只要对一个目录有w写的权限就可以删除这个目录下的任何文件或子目录;这样就会造成同一个目录下,如果有多个用户建立的属于自己的文件;任何只要对该目录有w写权限的用户,都可以删除别人在这个目录下建立的属于自己的文件;这样做事很可怕的;       在Linux系统中比较典型的例子就是“/tmp”、“/var/tmp”目录。这两个目录作为Linux系

2017-04-01 23:34:49 1386

原创 llinux中find命令

1.find命令用来在目录结构中搜索文件,并执行指定的操作。在指定目录下查找文件时,任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。2.格式find    pathname    -options      [-print -exec -ok ...]

2017-04-01 22:09:26 392

原创 时间指令stat内容详解

1.stat:用于显示文件的状态信息。        stat命令的输出信息比ls命令的输出信息要更详细2.其中stat的内容项具体含义:Access:文件最近一次的访问时间Modify:文件内容最近一次的修改时间Change:文件属性最近一次的修改时间

2017-04-01 11:27:41 547

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除