• 模板 基础数据结构


    //主要这些东西竟然都不会手打...

    队列

     1 #include<cstdio>
     2 #include<iostream>
     3 #define MAXN 1<<20
     4 using namespace std;
     5 int n;
     6 struct queue{
     7     int l,r,q[MAXN];
     8     queue():l(1),r(0) {}
     9     inline void push(int x){q[++r]=x;}
    10     inline void pop(){l++;}
    11     inline int front(){return q[l];}
    12     inline bool size(){return l<=r;}
    13 };
    14 int main(){
    15     scanf("%d",&n);
    16     for(int i=0;i<n;i++) q.push(i+1);
    17     while(q.size()) {
    18         printf("%d ",q.front());q.pop();q.push(q.front());q.pop();
    19     }
    20     return 0;
    21 }
    queue
     1 #include<cstdio>
     2 #include<iostream>
     3 #define MAXN 1<<20
     4 using namespace std;
     5 int n;
     6 struct queue{
     7     int l,r,q[MAXN];
     8     queue():l(1),r(0) {}
     9     inline void push(int x){q[(++r)|(MAXN-1)]=x;}
    10     inline void pop(){l++;}
    11     inline int front(){return q[l|(MAXN-1)];}
    12     inline bool size(){return l<=r;}
    13 };
    14 /*struct queue{
    15     int l,r,q[MAXN];
    16     queue():l(1),r(0) {}
    17     inline void push(int x){q[(++r)&(MAXN-1)]=x;}
    18     inline void pop(){l++;}
    19     inline int front(){return q[l&(MAXN-1)];}
    20     inline bool size(){return l<=r;}
    21 };*/
    22 queue q;
    23 int main(){
    24     scanf("%d",&n);
    25     for(int i=0;i<n;i++) q.push(i+1);
    26     while(q.size()) {
    27         printf("%d ",q.front());q.pop();q.push(q.front());q.pop();
    28     }
    29     return 0;
    30 }
    queue(位运算优化)

     1 #include<cstdio>
     2 #define MAXN 1<<20
     3 using namespace std;
     4 struct Tstack{
     5     const int MAXdata=10000;
     6     int top,data[MAXdata];
     7     Tstack() {top=0;}
     8     void push(int x){data[++top]=x;}
     9     void pop(){top--;}
    10     int top(){return data[top];}
    11     bool empty(){return top==0;}
    12 };
    13 int main(){
    14     
    15 } 
    stack

     

    边表

     1 #include<cstdio>
     2 #include<vector>
     3 using namespace std;
     4 const int MAXN=1<<20;
     5 vector <pair<int,int> >G[MAXN];
     6 inline void add(int u,int v,int w){
     7     G[u].push_back(make_pair(v,w));
     8     G[v].push_back(make_pair(u,w)); 
     9 }
    10 int main(){
    11     for(int i=0;i<G[i].size();i++){
    12         int v=G[u][i].first;
    13         int w=G[u][i].second;
    14     }
    15 }
    vector(带权)
     1 #include<cstdio>
     2 #include<vector>
     3 #define MAXN 1<<20
     4 using namespace std;
     5 vector <int> linker[MAXN],v[MAXN];
     6 inline void addedge(int x,int y,int z){
     7     linker[x].push_back(y);
     8     v[x].push_back(z); 
     9 }
    10 int main(){
    11     for(int i=0;i<linker[x].size();i++){
    12         //查询元素个数:size() 
    13         //do something 
    14     }
    15 } 
    16 // 稀疏图  
    17 
    18 vector
    vector
     1 #include<cstdio>
     2 #define MAXN 1<<20
     3 using namespace std;
     4 struct edge{
     5     int to,next,v;
     6 }e[MAXN];
     7 //add edge 
     8 inline void insert(int u,int v,int w){
     9     cnt++;
    10     e[cnt].to=v;
    11     e[cnt].next=last[u];
    12     last[u]=cnt;
    13     e[cnt].v=w;
    14 }
    15 // 遍历  
    16 int main(){
    17     for(int i=last[now];i;i=e[i].next){
    18         //do sth
    19     }
    20 }
    21 // 稠密图  
    链表

     1 #include<cstdio>
     2 #include<queue>
     3 #define MAXN 1000005
     4 using namespace std;
     5 int n;
     6 priority_queue<int,vector<int>,greater<int> >q;
     7 int main(){
     8     scanf("%d",&n);
     9     while(n--){
    10         int time;scanf("%d",&time);
    11         if(time==1) {int x;scanf("%d",&x);q.push(x);}
    12         if(time==2) {int top;top=q.top();printf("%d
    ",top);}
    13         if(time==3) {q.pop();}
    14     }
    15     return 0;
    16 }
    priority_queue
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define MAXN 100005
     6 using namespace std;
     7 int n,sum=0;
     8 struct heap{
     9     int t[MAXN];
    10     void push(int x){
    11         t[++sum]=x;
    12         for(int i=sum,j=i>>1;j;i=j,j=i>>1){
    13             if(t[j]>t[i]) swap(t[j],t[i]);
    14         }
    15     }
    16     void pop(){
    17         t[1]=t[sum--];
    18         for(int i=1,j=i<<1;j<=sum;i=j,j=i<<1){
    19             if(j+1<=sum&&t[j+1]<t[j]) j++;
    20             if(t[i]<t[j]) break;
    21             else swap(t[i],t[j]);
    22         }
    23     }
    24 }q;
    25 int main(){
    26     scanf("%d",&n);
    27     while(n--){
    28         int time;scanf("%d",&time);
    29         if(time==1) {int x;scanf("%d",&x);q.push(x);}
    30         if(time==2) {int top;top=q.t[1];printf("%d
    ",top);}
    31         if(time==3) {q.pop();}
    32     }
    33     return 0;
    34 }
    head
     1 #include<stdio.h>
     2 #include<string.h>
     3 const int maxN=1000005;
     4 int swap(int &a,int &b){int c=a;a=b;b=c;}
     5 struct heap{
     6     int data[maxN],tail;
     7     heap(){tail=0;}
     8     inline int min(int a,int b){
     9         if(b>tail)return a;
    10         return data[a]<data[b]?a:b;
    11     }
    12     void up(int x){
    13         if(x==1)return;
    14         if(data[x]<data[x>>1]){
    15             swap(data[x],data[x>>1]);
    16             up(x>>1);
    17         }
    18     }
    19     void down(int x){
    20         if(x<<1>tail)return;
    21         int p=min(x<<1,(x<<1)+1);
    22         if(data[p]<data[x]){
    23             swap(data[p],data[x]);
    24             down(p);
    25         }
    26     }
    27     void push(int x){data[++tail]=x;up(tail);}
    28     void pop(){swap(data[tail],data[1]);tail--;down(1);}
    29     int top(){return data[1];}
    30 }h;
    31 int main(){
    32     int n,a,b; scanf("%d",&n);
    33     while(n--){
    34         scanf("%d",&a);
    35         if(a==1){
    36             scanf("%d",&b);
    37             h.push(b);
    38         }
    39         if(a==2){
    40             printf("%d
    ",h.top());
    41         }
    42         if(a==3){
    43             h.pop();
    44         }
    45     }
    46 }
    OMG_link
  • 相关阅读:
    gulp ( http://markpop.github.io/2014/09/17/Gulp入门教程 )
    less 官网讲解 ( http://www.bootcss.com/p/lesscss/ )
    js 闭包 弊端
    js 闭包 理解 copy
    js 中 的 if使用条件
    $ each() 小结
    文件自动加载
    (openssl_pkey_get_private 函数不存在)phpstudy开启openssl.dll 时提示httpd.exe 丢失libssl-1_1.dll
    form
    js字符串处理
  • 原文地址:https://www.cnblogs.com/drizzly/p/7696446.html
Copyright © 2020-2023  润新知