C++ 基本数据结构整理

Hash Map (Unordered_map)

  • Insert

    #include <unordered_map>
    using namespace std;
    
    unordered_map <char, bool> hash_map;
    hash_map.insert(make_pair<char,bool>(‘a‘,true));
  • find

    if(hash_map.find(num) == hash_map.end())
    cout << "not found" << endl;unordered_map <char, bool> :: iterator got = hash_map.find(‘a‘);got->first 指向keygot->second 指向value

String

  1. 如何遍历string里每个元素

    //sa is a string
    for( string::iterator p = sa.begin() ; p!= sa.end() ; p++ )
             cout << *p ;
         cout << endl;
  2. 如何使用string里的find
    string:size_type pos = str.find(‘0‘);        // pos is the position in string you find.
    
    if(pos==string::npos)
     cout << "cannt find";
    else
     cout << pos;

Type Conversion

  1. Char -> Int

    char s = ‘5‘
    int a = s-‘0‘;
  2. Int -> String

    string s = std::to_string(5);
  3. String -> Int

    std::string myString = "45";
    int value = atoi(myString.c_str()); //value = 45 
  4. You cann‘t do switch-case statement on string by C++

Stack

  1. 如何压入一个pair

    stack<pair<TreeNode*, int> > s;
    s.push(make_pair(root,1));
    
    TreeNode *tmp = s.top().first;
    int len = s.top().second; 
  2. 用STL stack中的push(),pop(),top()
    // STL 栈适配器(stack)
    #include <iostream>
    #include <stack>
    using namespace std;
    
    int main()
    {
     stack<int> is;               //定义栈对象
    
     for (int i = 0; i < 100; ++i)
      is.push(i+100);          //将100~199一次顺序入栈  
    
     cout<<"top element:"<<is.top()<<endl; //查看栈顶元素
     is.pop();                    //出栈操作
     cout<<"new top element:"<<is.top()<<endl; //查看栈顶元素
     cout<<"size:"<<is.size()<<endl;   //查看栈高度  
    
     return 0;
    } 

Heap

  • 如何用已有的数据结构实现heap的操作包括push_head, pop_head, sort_heap

    // range heap example
    #include <iostream>     // std::cout
    #include <algorithm>    // std::make_heap, std::pop_heap, std::push_heap, std::sort_heap
    #include <vector>       // std::vector
    
    int main () {
      int myints[] = {10,20,30,5,15};
      std::vector<int> v(myints,myints+5);
    
      std::make_heap (v.begin(),v.end());
      std::cout << "initial max heap   : " << v.front() << ‘\n‘;
    
      std::pop_heap (v.begin(),v.end()); v.pop_back();                 //pop_heap()用于弹出堆中的第一个元素,并把它放到区间的最后一个位置,然后重新将前面的元素构建成一个堆。
      std::cout << "max heap after pop : " << v.front() << ‘\n‘;
    
      v.push_back(99); std::push_heap (v.begin(),v.end());             // push_heap()用于将指定区间的最后一个元素加入堆中并使整个区间成为一个新的堆。注意前提是最后一个元素除外的所有元素已经构成一个堆。
      std::cout << "max heap after push: " << v.front() << ‘\n‘;
    
      std::sort_heap (v.begin(),v.end());
    
      std::cout << "final sorted range :";
      for (unsigned i=0; i<v.size(); i++)
        std::cout << ‘ ‘ << v[i];
    
      std::cout << ‘\n‘;
    
      return 0;
    }
    
    Output:
    initial max heap   : 30
    max heap after pop : 20
    max heap after push: 99
    final sorted range : 5 10 15 20 99

Array & Vector

  • 多维vector如何判断行和列的大小

    vector<vector<int> > matrix
    int rowSize = matrix.size();
    int colSize = matrix[0].size()
  • 使用insert()在一个指定的position前插入一个元素

    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main()
    {
        vector<int> v(3);
        v[0]=2;
        v[1]=7;
        v[2]=9;
    
        //在最前面的元素前插入8
        v.insert(v.begin(),8);
    
        //在第二个元素前插入新元素1
        v.insert(v.begin()+2,1);
    
        //在末尾插入新元素1
        v.insert(v.end(),3);     
    
        for(vector<int>::iterator it=v.begin();it!=v.end();it++)
        cout<<*it<<endl;
        system("pause");
        return 0;
    }
  • 用STL查找vector中最小元素的方法

    cout<<"maxinum:"<<*min_element(v.begin(),v.end())<<endl;
    int index = min_element(v.begin(),v.end())-v.begin();
  • 用vector创建多维数组. 多维的数组被写做 vector<vector<int>空格>. 其实是描述了一个二维数组/矩阵 a。其初始化可以参考下面的代码

    std::vector<std::vector<int> > a;
       vector< vector<int> > intVV;
          vector<int> intV;
          int i,j;
          for(i=0;i<10;++i){
            intV.clear();
            for(j=0;j<10;++j)
            intV.push_back(i*10+j);
            intVV.push_back(intV);
  • 一个遍历数组的简单写法

    int num[] = {2,2,3};
        for(int i:num)   // You must define i here.
            cout << i << endl;
  • vector中的pop/push

     #include <vector>
    using namespace std;
    
    vector<char> array;
    array.push_back(‘9‘);
    
    char num = array.back();
    array.pop_back();

STL操作符重载来改变sort算法

// 排序元素,比较的对象
struct Person
{
  Person(int id, const string& name, int age): id_(id), name_(name), age_(age)
  {}  

  int id_;
  string name_;
  int age_;
};  

// 方式1:重载operator<用于排序时的比较(写在函数体内)
bool operator< (const Person& rt)
{
  return this->id_ < rt.id_;
}  

// 排序函数写法,默认调用operator<
sort(members.begin(), members.end());  

// 方式2:写比较函数
bool CompAge(const Person& pl, const Person& pr)
{
  return pl.age_ < pr.age_;
}  

// 排序时传入比较函数指针
sort(members.begin(), members.end(), CompAge);  

// 方式3:仿函数
struct CompName
{
  bool operator()(const Person& pl, const Person& pr)
  {
    return pl.name_ < pr.name_;
  }
};  

// 排序时传入函数对象
sort(members.begin(), members.end(), CompName());  

Leetcode中数据结构的定义

Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
时间: 2024-11-05 14:50:14

C++ 基本数据结构整理的相关文章

Java数据结构整理(一)

ava数据结构内容整理关键字: 数据结构 Collection:List.SetMap:HashMap.HashTable如何在它们之间选择一.Array , ArraysJava所有“存储及随机访问一连串对象”的做法,array是最有效率的一种.1. 效率高,但容量固定且无法动态改变.array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量.2.Java中有一个Arrays类,专门用来操作array.arrays中拥有一组static函数,equals(

数据结构整理(二) 树

一.前言 项目源码及其他声明等参见数据结构(一)线性结构篇. 二.相关概念 树作为一种应用广泛的一对多非线性数据结构,不仅有数据间的指向关系,还有层级关系,示例见图一.因树的结构比较复杂,为了简化操作及存储,我们一般将树转换为二叉树处理,因此本文主要讨论二叉树. 二叉树 二叉树是每个节点最多拥有两个子节点的树结构,若移除根节点则其余节点会被分成两个互不相交的子树,分别称为左子树和右子树.二叉树是有序树,左右子树有严格的次序,若颠倒则成为一棵不一样的二叉树. 满二叉树 满二叉树,顾名思义除叶子节点

python常见数据结构整理

Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编号.Python中有6种内建的序列.其中列表和元组是最常见的类型.其他包括字符串.Unicode字符串.buffer对象和xrange对象.下面重点介绍下列表.元组和字符串. 1.列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. (1).创

数据结构整理 第一章

1.1数据结构: 计算机科学是一门研究数据表示和数据处理的科学,在利用计算机进行数据处理时,实际需要处理的数据元素一般有很多.要提高数据处理效率,节省存储空间,如何组织数据就成了关键问题.而数据结构用来反映一个数据的内部构成,即数据由哪些成分构成,以什么方式和结构构成. 1.1.1基本概念: 1.数据 数据(Date)是外部世界信息的载体.它能够被计算机识别.存储和加工处理,是计算机程序的加工的原料.计算机程序处理各种各样的数据,可以是数值数据,如整数.实数或复数,主要用于工程计算.科学计算和商

我的redis缓存机制和redis数据结构整理(一)

摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单线程的 3.管道 4.我的测试代码 内容总结 0.redis安装 官网地址 http://redis.io/ 下载:wget http://download.redis.io/releases/redis-3.2.4.tar.gz 解压:tar xzf redis-3.2.4.tar.gz 编译:c

redis数据结构整理(一)

摘要: 0.redis安装 1.redis的常用数据结构类型 1.1  String 1.2  List 1.3  Set 1.4  Sorted Set 1.5  Hash 2.redis是单进程单线程的 3.管道 4.我的测试代码 内容总结 0.redis安装 官网地址 http://redis.io/ 下载:wget http://download.redis.io/releases/redis-3.2.4.tar.gz 解压:tar xzf redis-3.2.4.tar.gz 编译:c

java数据结构整理(二)

一.List接口,有序的Collection接口,能够精确地控制每个元素插入的位置,允许有相同的元素 1.链表,LinkedList实现了List接口,允许null元素,提供了get().remove().insert()方法,没有同步方法 [java] view plaincopy public void add() { LinkedList List = new LinkedList(); List.add("link1"); List.add("link2")

redis数据结构整理(二)

摘要: 1.各个数据结构的应用举例 1.1 String类型应用举例 1.2List类型应用举例 1.3Set类型应用举例 1.4Sorted Set类型应用举例 1.5Hash类型应用举例 内容: 1.各个数据结构的应用举例 1.1 String类型应用举例: 利用INCR,DECR命令来构建计数器系统. 1.2List类型应用举例 利用list的栈特性实现取最新n条数据的功能 利用list的队列特性实现简单消息队列 1.3Set类型应用举例 去重操作 1.4Sorted Set类型应用举例

数据结构整理

1.数据结构 相互之间存在一种或多种特定关系的数据元素的集合 2. 逻辑结构:数据元素之间的相互关系. 物理结构:数据的逻辑结构在计算机中的存储形式. 3. 时间复杂度:描述了该算法的运行时间: 空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的量度: 4.顺序存储结构 (1)用一段地址连续存储单元一次存储线性表的数据元素: (2)顺序表定义结构体:元素数组和表长度 1 /* 2 顺序表定义的结构体 3 */ 4 5 #define MaxSize 100//最大空间 6 typedef