
数据结构
祝我万瘦不胖
希望
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
栈实现
栈实现 stack.h//stack后进先出#include<assert.h>template<class T>class Stack{public: Stack() :_pdata(NULL) , _size(0) , _capacity(0) {} ~Stack() { delete[] _pdata;原创 2016-11-30 22:39:38 · 225 阅读 · 0 评论 -
整数N!尾部0的个数
问题描述:给一个整数n,返回n!尾部0的个数。 方法一:数字n超大时,易超时class Solution {public: int trailingZeroes(int n) { int sum=0; for(int i=5;i<=n;i+=5) { int x=i; while(x%5==0原创 2017-10-29 20:34:12 · 461 阅读 · 0 评论 -
Reverse Bits
问题描述:翻转二进制位。class Solution {public: uint32_t reverseBits(uint32_t n) { uint32_t res=0; for (int i = 0; i < 32; ++i) { //得到最低位,然后将其左移到最终位,和res或等 res |= ((n >原创 2017-10-29 20:14:00 · 335 阅读 · 0 评论 -
判断一个数是不是2的幂类似问题
问题描述:判断n是否为2的幂次。class Solution {public: bool isPowerOfTwo(int n) { if(n<=0) return false; return ((n&(n-1))==0);//n&(n-1)去除n最低位的一个1 }};问题描述:判断一个数是否为3的幂。class Solut原创 2017-10-29 19:53:20 · 344 阅读 · 0 评论 -
两个队列实现一个栈
问题分析: <1>每次push都向_q1中push; <2>**注意**:每次pop时,都先判断_q1中是否有数据; 先看_q1中是否有数据,有数据,将_q1数据移动到_q2,然后将_q2的top数据pop;_q1没有数据,将_q2数据移动到_q1,然后将_q1的top数据pop;pop场景:pop场景1:_q1和_q2中都没有数据,assert;pop场景2:_q1有数据,原创 2017-05-30 20:12:30 · 339 阅读 · 0 评论 -
利用一个数组实现两个栈
问题分析:利用一个数组实现连个栈,有多种方式如:方法1:利用奇偶位,分别存储栈1和栈2的数据;方法2:从中间开始将数组一分为二,左边为栈1,右边为栈2;方法3:栈1从头开始增长,栈2从尾向头进行增长,相遇后,增容;优劣分析:***建议:*** 如果要快速实现逻辑,可以不用实现成动态增长内存的版本,直接定义一个静态数组完成;有的时候可以不用实现模板类型的,直接怎么简单怎么实现。代码部分原创 2017-05-30 20:55:57 · 1687 阅读 · 0 评论 -
使用两个栈实现一个队列
问题分析:push:直接将元素push到_s1即可;pop:在进行pop时,队列是先进先出,栈是先进后出。故可以利用_s2,当_s2为空时,将_s1中的数据全都移动到_s2中,此时就可以实现先进先出。**注意:** 只有当_s2为空,将_s1的数据移动到_s2场景一:第一次pop,_s2 为空场景二:_s2不为空,_s1不为空代码部分:#pragma once#include原创 2017-05-29 11:35:48 · 400 阅读 · 0 评论 -
实现一个栈,push、pop、求栈中最小值min的时间复杂度为O(1)
使用平台:vs2013一个问题肯定不止一种解法,我下面给的是利用两个栈来求去栈中最小值,当然一个栈也可以求取问题。一个栈的求解这里就只给出思路。 一个栈求解:每次push,push两个值,当前要push的值,和最小值,这样就可以实现一个栈求解问题,但是这样做的话每次取栈顶的值或者push时会比较麻烦。所以可以借助pair来存取当前值和最小值。问题分析:每次插入时: 1.先判断_mi原创 2017-05-27 22:46:31 · 1377 阅读 · 0 评论 -
判断元素出栈合法性
问题分析:****注意:**** 首先需要明确这个问题存在一个缺陷,就是元素中不能有相同的元素,不然就会误判。大致思路:代码部分:#include<iostream>using namespace std;#include<assert.h>#include<stack>bool OutRight(int* in, int* out, size_t insize, size_t out原创 2017-05-30 21:33:15 · 611 阅读 · 0 评论 -
位图 BitMap
看到这个名字就可以想象到位图顾名思义就是通过一个位来存储一个整型,用0和1来标记这个数存在还是不存在。通常位图可以在内存不够、只判断数字在不在的情况下使用,节省空间。#pragma once#include <iostream>using namespace std;#include <vector>class BitSet{public: BitSet(const size_t&原创 2017-04-30 16:48:16 · 230 阅读 · 0 评论 -
堆的一些基本问题
使用平台:vs2013基础概念部分堆:堆数据结构是一种数组对象,通过数组实现堆数据结构,可以看做是一颗完全二叉树结构。堆分为大堆和小堆大堆:每个父节点都大于子节点; 小堆:每个父节点都小于孩子节点。堆实现过程主要用到的知识点1>用parent代表父节点下标,chaild代表孩子节点下标,则:chaild=parent*2+1parent=(chaild-1)/22>通过仿函数实现大小堆代码的复用;原创 2017-04-17 19:13:39 · 334 阅读 · 0 评论 -
队列实现
队列实现queue.h//stack后进先出#include<assert.h>template<class T>class Stack{public: Stack() :_pdata(NULL) , _size(0) , _capacity(0) {} ~Stack() { delete[] _pdata;原创 2016-11-30 22:42:49 · 214 阅读 · 0 评论 -
计算一个整数各个位的和,直到和<10输出
问题分析: 可以通过循环来做,但是时间复杂度太高,可以通过以下方法来做。(13)%9=(1*10+3)%9=(1*9+1+3)%9=(1+3)%9故:(ab)%9=(a+b)%9class Solution {public: int addDigits(int num) { if(num==0) return 0; //下面不会出原创 2017-11-05 16:43:58 · 802 阅读 · 0 评论