- 博客(34)
- 收藏
- 关注
原创 实现一颗二叉树的层序遍历
#include#includeusing namespace std;struct Node{ Node(int val) :_left(NULL) ,_right(NULL) ,_val(val) {} Node* _left; Node* _right; int _val;};class BinaryTree{ public: BinaryTree(
2017-07-24 15:25:38 276
原创 元素出栈、入栈顺序的合法性
基本思路: 很直观的一种想法,建立一个辅助栈,把输入的第一个序列中的数字一次压入该辅助栈,并按照第二个序列的顺序从该栈中弹出数字。判断思路:遍历出栈顺序中的元素,有两种情况 :(1)如果元素是栈顶的元素,则pop出来;(2)如果不是栈顶元素,则根据入栈顺序将没入栈的元素push进栈,直到将该元素push栈中,然后将该元素pop出来; 如果push完所
2017-07-21 10:42:08 433
原创 实现一个栈stack,push出栈,pop入栈,min返回最小值
如果一次可以将同一个数据进行两次压栈一.要压入的数据比栈顶的数据大(1).将原来栈顶的元素保存起来再Pop掉(2).将新元素压栈,再将原来栈顶的元素压栈二.要压入的数据比栈顶的数据小直接将该数据两次压栈如果每次都如此压栈的话到最后栈顶的元素一定是所有数据中最小的元素,而且也不会改变入栈的顺序//两个元素为一组,栈顶为最小的元素temp
2017-07-21 10:37:01 451
原创 使用两个栈实现一个队列+使用两个队列实现一个栈
1. 两个栈实现队列//前提已知:struct Stack{ int top; //栈顶指针 int stacksize;//栈的大小 int *s; //栈底指针};void InitStack(Stack *s);void Push(Stack *s, int k);int Pop(*s);int IsStackEmpty(*
2017-07-18 19:14:33 205
原创 单链表的相交
两个不含环的单链表的相交 相交指的是结点的地址相同,而不是结点的值相同 ************************************************************************/[cpp] view plain copytypedef struc
2017-07-18 19:11:55 347
原创 合并两个有序链表
合并两个有序链表12345678910111213141516171819202122ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ if(pHead1 == NULL) return
2017-07-18 18:55:49 220
原创 面试题1
给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少? 解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、对于问题2,记录下问题1的碰
2017-07-18 18:43:02 181
原创 关于链表中是否带环和找到环的入口点
面试题一:判断链表是否带环[objc] view plain copy "font-size:18px;">strong style="background-color: rgb(255, 255, 255);">int FndLoop(pLinkList list) { pLinkNode fast=list->pHead;
2017-06-19 11:07:21 182
原创 c语言中链表的实现
linklist.h[cpp] view plain copy"font-size:18px;">#ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include #include #include typedef int DataType; typedef st
2017-06-19 10:59:26 182
原创 链表面试题
从尾到头打印单链表//不改变链表结构,从尾到头打印单链表 (递归实现)void PrintListRevers_Recursively(pList phead){ if (phead) { if (phead->next) { PrintListRevers_Recursively(phead->next);
2017-06-19 10:53:19 162
原创 链表及链表面试题
首先看一下顺序表和链表的优缺点,分别在什么场景下使用?顺序表存储原理: 顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度;优点: 存取速度高效,通过下标来直接存储;缺点: 1.插入和删除比较慢,2.不可以增长长度 ;比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序;链表存储原理: 链表存储是在程序运行过程中
2017-06-19 10:50:59 176
原创 Linux中 信号signal
#include #include void myhandler(int signal){}int mysleep(int timeout){ struct sigaction act, oact; act.sa_handler = myhandler;//自定义处理函数 sigemptyset(&act.sa_mask); act.sa_fla
2017-06-19 10:44:03 149
转载 文件压缩c++
主要实现思路: 先对字符进行哈夫曼编码,再利用最小堆的特性,构造哈夫曼树。统计文件字符出现的次数,本质是利用字符出现的次数进行构造哈夫曼树; 然后通过遍历哈夫曼树获取哈夫曼编码;压缩文件中有两部分信息,先是配置信息的主要内容:字符,字符出现次数,然后是huffman code,通过info标记区分两部分信息;当解压缩时可以利用压缩文件配置信息中的内容构造出一颗新的哈夫曼树,然后利用其中
2017-06-19 10:43:02 757
原创 Linux 中生产者与消费者问题
条件变量Condition Variable一个Condition Variable总是和一个Mutex搭配使用的。一个线程可以调用pthread_cond_wait在一个Condition Variable上阻塞等待,这个函数做以下三步操作:释放Mutex(不满足条件时必须进行休眠)进行阻塞式等待(不能抱着锁资源休眠)被唤醒时能够重新获得Mutex资源并等待(能被唤醒)基
2017-06-10 10:45:16 491
原创 Linux内核中的信号
一、Linux信号的基本概念1、什么是信号? 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调
2017-06-10 10:43:11 589
原创 Linux内核中的线程及多线程
一、线程的概念、理解及特点 1.线程的概念: 至今为止,Linux下还是没有“真正的线程”。谈到线程就不得不提到进程这概念,进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段,代码段和堆栈段,这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作.为了进一步减少处理机的空转时间支持多个处理器和减少上下文切换开销,进程在演化中出现
2017-06-10 10:40:14 3606
原创 Linux内核中的线程死锁
一、死锁的概念 1.什么是死锁: 死锁 (deadlocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下
2017-06-10 10:39:19 751
原创 Linux 中管道
什么是管道管道是Linux中很重要的一种通信方式管道的五种特点单向通信管道只能进行有血缘关系的进程之间通信生命周期随进程(常驻进程最怕内存泄露)对写方式基于流(面向字节流)(与传送数据的格式无关)管道带有同步机制当两个进程同时访问一个资源时,该资源叫“临界资源”;当两个进程同时访问一个资源时的代码,叫临界区
2017-06-10 10:38:18 243
原创 Linux 中线程同步与互斥
互斥量mutex使用两个线程累加一个公共资源各100000次,结果应为200000,在没有加互斥锁的情况下出现随机数。未加入互斥锁对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引⼊入互斥锁(Mutex,MutualExclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待⽽而不能访问共享数
2017-06-10 10:36:38 217
原创 【整理归纳】Linux中 vim 快捷键
1. 复制使用yy复制一行使用 行数n+yy 复制n行使用p对复制的行进行粘贴2. 剪切使用dd剪切一行使用 行数n+dd 剪切n行使用p对剪切的行进行粘贴3. 移动Vim用数字+G来移动行,比如你要移动到342行,那就是342G4. 多行删除首先在命令模式下,输入“:set nu”显示行号;通过行号确定你要删除的行;命令输入
2017-06-10 10:35:40 182
原创 task_struct(进程描述符)
进程是一个正在执行的程序。 进程是程序的一个运行实例。 进程能分配处理器并由处理器执行的实体。 如果从内核的角度看的话:进程是分配系统资源的单位。当一个程序被加载到内存之后并为他分配一个PCB(进程控制块),这时候就称为进程了。在linux中PCB就是一个名字叫做task_struct的结构体,我们叫他”进程描述符”。它里面有进程执行的所有信息,所以CPU对task_struct进行管
2017-06-10 10:31:38 235
原创 【整理归纳】Linux中 find查找命令
Linux下查找文件的命令有两个,分别是locate 和 find。locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。简单介绍下它的两个选项。#locate
2017-06-10 10:28:53 235
原创 【整理归纳】Linux中的粘滞位
什么是粘滞位(sticky)?简单来说,就是给你的目录打了个标签。系统看到目录后面带有这个标签,就不会让其他用户随意删除这个目录了。目录的sticky位表示这个目录里的文件只能被owner和root删除 。[panda@panda Desktop]$ ll -d /tmpdrwxrwxrwt. 32 root root 4096 Apr 1 10:00 /tmp[panda@pa
2017-06-10 10:27:55 187
原创 【整理归纳】Linux中文件的Access,Modify,Change区别
【整理归纳】Linux中文件的Access,Modify,Change区别Access\Modify\Change的初始时间记录都是文件被创建的时间Access 指最后一次读取的时间(访问)Modify 指最后一次修改数据的时间(修改)Change 指最后一次修改元数据的时间(改变)Access 意思是“访问”。在终端上用cat、more 、less、grep、sed、
2017-06-10 10:25:57 7028
原创 C++/C 中防止头文件重复包含的解决办法深入
为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。[cpp] view plain copy方式一: #ifndef __SOMEFILE_H__ //或写为#if !define __SOMEFILE_H__
2017-05-18 23:13:29 698
原创 C++ 异常处理
异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题。而传统错误处理技术,检查到一个局部无法处理的问题时:1.终止程序(例如atol,atoi,输入NULL,会产生段错误,导致程序异常退出,如果没有core文件,找问题的人一定会发疯)2.返回一个表示错误的值(很多系统函数都是这样,例如malloc,内存不足,分配失败,返回NULL指
2017-05-18 23:12:13 241
原创 c++智能指针
在c++中,动态内存管理是通过运算符new来开辟空间的,然后用delete来释放这个空间。 动态内存很容易出现问题,因为确保在正确的时间释放内存是很困难的。有时我们会忘记释放内存,这样就会造成内存泄露;有时在还有指针引用内存的时候就释放了它,这时就会出现引用非法内存的指针。举个例子:[cpp] view plain copy
2017-05-18 23:05:18 152
原创 深拷贝 —— String类的实现
首先我们先来看看深浅拷贝的区别:浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象 中引用型字段的值他将反映在原是对象中,也就是说原始对象中对应的字段也会发生变化。深拷贝与浅拷贝不同的是对于引用的处理,深拷贝将会在新对象中创建一 个新的和原是对象中对应字段相同(内容相同)的字段,也就是说这个引用和原是对象的引用是不同的,我们
2017-05-18 23:03:35 263
原创 指针和引用的区别
今天只要看看引用的知识:什么是引用:"引用"是C++中引入的新的变量类型,它的作用是为一个变量起一个别名。[cpp] view plain copy int a=10; int &b=a; b是a的引用,即b是a的别名,a和b的作用相同。对a所进行的操作的结果与对b所进行的操作结果是完全相同的。声明b为引用
2017-05-18 23:01:42 295 1
原创 静态成员和静态成员函数
一,静态数据成员静态数据成员是一种特殊的数据成员,它以关键字static开头。静态数据成员是不属于某一个对象的,它属于所有这个类的对象,或者说它属于这个类。静态数据成员在内存中只占一份内存单元。每个对象都可以引用这个静态数据成员,静态数据成员对所有对象都是一样的。1、如果只定义了类,而未定义对象,则类的一般数据成员是不占内存空间的,但是静态数据成
2017-05-18 23:00:10 231
原创 c++模版链表的实现
[cpp] view plain copy"font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1 #include #include #include using namespace std; templatetypename T> struct Node {
2017-05-18 22:57:26 173
原创 变量交换
1. 给定两个整形变量的值,将两个值的内容进行交换。2. 不允许创建临时变量,交换两个数的内容#include//int main()//{// int a=0,b=0,c=0;// a=123;// b=456;// c=a;// a=b;// b=c;// printf("a=%d\nb=%d\n",a,b);// system("pause");/
2016-09-27 12:00:22 168
原创 素数,闰年,乘法口诀表问题(新手推荐)
100~200之间素数#includeint main(){int i=0,j=0;for(i=100;i{for(j=2;jif (i%j==0)break;if(j==i)printf("%d ",i);}system("pause");return 0;}乘法口诀//#include//int main(
2016-09-27 11:21:33 313
原创 一个菜鸟的编程路
我的名字叫曾永鹏,现在是西安工业大学大三的一名本科生,因为在大一大二没有好好学习计算机方面的知识,所以现在想好好努力,从0开始好好学习。 我未来的编程目标:能自己独立完成一些复杂的编程题 我决定以后在学习时,上课认真听老师讲课,下课积极完成作业,不会的问题虚心求教。每周要有四五天认真的自己学习和练习编程。 现在暂时还没有想好要到哪个公司,只是想在大学期间学会编程的操作就好,未来再
2016-09-25 12:29:40 433 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人