C - Mergeable Stack

ZOJ - 4016

一开始用stl中内置的栈来写,其中第三个操作,我先复制到一个数组,再将其倒给另一个栈

这个方法有两个错误的地方:

1.栈在内存很大需要扩容时,内存会成倍增长,解决办法是提前规定每个栈的大小,但这样还是不适用于这题

2.如果每次都用一个数组来过度,时间复杂度是O(N*N)

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=3*1e5+5;
struct node
{
node *nex;
int num;
};
node *head[maxn];
node *tail[maxn];
int num[maxn];
void add(int s,int v)
{
node *chan=head[s];
head[s]=new node;
if(tail[s]==NULL)
{
tail[s]=head[s];
}
head[s]->num=v;
head[s]->nex=chan;
}
int main()
{
int T,s,v,t,q,n,comd;
cin>>T;
for(int i=1;i<=T;i++)
{
scanf("%d %d",&n,&q);
for(int j=1;j<=n;j++)
head[j]=tail[j]=NULL;
for(int j=1;j<=q;j++)
{
scanf("%d",&comd);
if(comd==1)
{
scanf("%d %d",&s,&v);
add(s,v);
}
else if(comd==2)
{
scanf("%d",&s);
if(head[s]==NULL)
printf("EMPTY\n");
else
{
printf("%d\n",head[s]->num);
head[s]=head[s]->nex;
if(head[s]==NULL)tail[s]=NULL;
}
}
else if(comd==3)
{
scanf("%d %d",&s,&t);
if(tail[t]!=NULL&&tail[s]!=NULL)
{
tail[t]->nex=head[s];
head[s]=head[t];
tail[t]=NULL;
head[t]=NULL;
}
else if(tail[s]==NULL)
{
head[s]=head[t];
tail[s]=tail[t];
head[t]=NULL;
tail[t]=NULL;
}
}
} }
return 0;
}

  

Mergeable Stack(链表实现栈)的更多相关文章

  1. ZOJ 4016 Mergeable Stack 链表

    Mergeable Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB Given  initially empty stacks, the ...

  2. ZOJ 4016 Mergeable Stack(利用list模拟多个栈的合并,STL的应用,splice函数!!!)

    Mergeable Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB Given initially empty stacks, ther ...

  3. ZOJ 4016 Mergeable Stack(栈的数组实现)

    Mergeable Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB Given  initially empty stacks, the ...

  4. Java数据结构——用链表实现栈

    //================================================= // File Name : LinkStack_demo //---------------- ...

  5. Java用链表实现栈和队列

    1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next ...

  6. C Mergeable Stack(list超好用)

    ZOJ  4016 list用法https://www.cnblogs.com/LLLAIH/p/10673068.html 一开始用普通的栈做,超内存,链表模拟栈也没写出来orz.补题发现list超 ...

  7. Java之链表实现栈结构

    package com.wzlove.stack; import java.util.Iterator; import java.util.NoSuchElementException; /** * ...

  8. 基于顺序链表的栈的顺序存储的C风格实现

    头文件: #ifndef _SEQSTACK_H_ #define _SEQSTACK_H_ typedef void SeqStack; //创建一个栈 SeqStack* SeqStack_Cre ...

  9. 基于链式链表的栈链式存储的C风格实现

    链式链表的头文件与CPP文件见前文 头文件: #ifndef _LINKSTACK_H_ #define _LINKSTACK_H_ typedef void LinkStack; //创建一个栈 L ...

随机推荐

  1. SQL Server datetime类型转换超出范围的报错

    一个很基础的插入语句: insert into table1 select col1,convert(datetime,col2),convert(datetime,col3),col4,col5 f ...

  2. 终极 Shell——ZSH

    Shell是Linux/Unix的一个外壳,你理解成衣服也行.它负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,内核是真正干活的,干完之后 ...

  3. SpringBoot2.0 最简单的 idea 快速创建项目

    第一步 第二步 第三步 以上就是idea快速创建springboot的方法,创建之后等maven 依赖下载完成,就可以使用

  4. 安全管理器SecurityManager

    一.文章的目的 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题. 比如在阅读源码的时候,发现这样的代码,想了解是做什么的 ...

  5. 机器学习算法总结(五)——聚类算法(K-means,密度聚类,层次聚类)

    本文介绍无监督学习算法,无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类,常见的无监督学习就是聚类算法. 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善 ...

  6. Hive窗口函数

    参考地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics 环境准备: CRE ...

  7. 第9章 Java中的线程池 第10章 Exector框架

    与新建线程池相比线程池的优点 线程池的分类 ThreadPoolExector参数.执行过程.存储方式 阻塞队列 拒绝策略 10.1 Exector框架简介 10.1.1 Executor框架的两级调 ...

  8. windows解决访问github慢问题

    ·1.更改host文件 文件地址: C:\Windows\System32\Drivers\etc ​ 如果不能直接修改,可拷贝到桌面修改后再复制回去 2.在host文件追加 ​ #github 19 ...

  9. npm run dev 在Linux上持久运行

    关于node.js应用程序如何持久运行,我在node.js服务端程序在Linux上持久运行用过. 这次主要是针对是一个vue.js应用程序. vue.js应用程序通常运行命令是npm run dev. ...

  10. Luogu5021 [NOIP2018]赛道修建

    Luogu5021 [NOIP2018]赛道修建 一棵大小为 \(n\) 的树,边带权.选 \(m\) 条链使得长度和最小的链最大. \(m<n\leq5\times10^4\) 贪心,二分答案 ...