1057 Stack (30 分) 分块思想,pop,push的重载

分块+hash

int block[101]={0};
int hashtable[100001]={0};
#include<bits/stdc++.h>
using namespace std;
stack<int> s;
int block[101]={0};
int hashtable[100001]={0};
int getmid(){
    int k,sum=0,num=0,now;
    if(s.size()%2==0)
        k=s.size()/2;
    else
        k=(s.size()+1)/2;
    while(sum+block[num]<k){
        sum+=block[num];
        num++;
    }
    now=1000*num;
    while(sum+hashtable[now]<k)
    {
        sum+=hashtable[now];
        now++;
    }
    return now;
}
void pop(){
    int temp=s.top();
    s.pop();
    cout<<temp<<endl;
    hashtable[temp]--;
    block[temp/1000]--;
}
void push(int num){
    s.push(num);
    hashtable[num]++;
    block[num/1000]++;
}
int main(){
    int n,number;
    cin>>n;
    for(int i=0;i<n;i++){
        char c[20];
        cin>>c;
        if(strcmp(c,"Pop")==0)
        {
            if(s.size()==0)
               cout<<"Invalid"<<endl;    
            else
                pop();
        }
        if(strcmp(c,"Push")==0){
            cin>>number;
            push(number);
        }
        if(strcmp(c,"PeekMedian")==0){
            if(s.size()==0)
                cout<<"Invalid"<<endl;
            else{
                int mid=getmid();
                cout<<mid<<endl;
            }
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一个测试stackpushpop方法的例子: ```python # 导入stack模块 from collections import deque # 创建一个空的stack stack = deque() # 将元素1、2、3依次压入stack stack.append(1) stack.append(2) stack.append(3) # 打印stack的内容 print("压入元素后的stack:", stack) # 弹出stack的顶部元素 stack.pop() # 打印stack的内容 print("弹出元素后的stack:", stack) ``` 输出结果为: ``` 压入元素后的stack: deque([1, 2, 3]) 弹出元素后的stack: deque([1, 2]) ``` 在这个例子中,我们使用了Python内置的deque模块来创建一个stack,并测试了它的pushpop方法。我们首先将元素1、2、3依次压入stack,然后打印stack的内容。接着,我们弹出stack的顶部元素,并再次打印stack的内容。从输出结果可以看出,我们成功地测试了stackpushpop方法。 ### 回答2: Stack是一种先进后出的数据结构,其操作包括入栈push和出栈pop。为了测试Stack的这两个方法,我们可以编写以下示例程序: ```java import java.util.Stack; public class StackExample { public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); // 入栈5个整数 stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); // 输出栈顶元素并出栈 System.out.println(stack.pop()); // 输出 5 System.out.println(stack.pop()); // 输出 4 // 再入栈一个整数 stack.push(6); // 输出栈顶元素但不出栈 System.out.println(stack.peek()); // 输出 6 // 再出栈两个整数 System.out.println(stack.pop()); // 输出 6 System.out.println(stack.pop()); // 输出 3 } } ``` 此程序首先创建一个空的Stack对象。然后通过push方法向栈中依次插入5个整数。接着使用pop方法输出和删除栈中的两个元素,别是数字5和4。在此基础上再次使用push方法插入数字6,然后使用peek方法输出但不删除栈顶元素,即数字6。最后再次使用pop方法输出和删除两个元素,别是数字6和3。 通过这个示例程序,我们可以验证Stackpushpop方法的正确性,以及peek方法输出栈顶元素但不改变栈的状态。此外,Stack还提供了其他常用方法,如empty方法判断栈是否为空、search方法查找元素在栈中的位置、size方法获取栈中元素的数量等。这些方法在实际开发中也可以用于对Stack进行测试。 ### 回答3: Stack是一种常用的数据结构,它基于“后进先出”的原则(LIFO),允许我们在栈顶上添加元素和从栈顶弹出元素。在这个问题中,我们将编写一个Stack类,并测试其push()和pop()方法。 我们首先需要定义Stack类,它可以由一个列表来实现。下面是Stack类的定义: ``` class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() ``` 现在我们已经定义了Stack类,我们可以在该类上调用push()和pop()方法进行测试。我们将按照以下步骤进行测试: 1. 创建一个Stack对象 ``` my_stack = Stack() ``` 2. 使用push()方法向栈中添加元素 ``` my_stack.push('Python') ``` 3. 检查栈中是否有元素 ``` print(my_stack.items) ``` 输出应该是['Python']。 4. 使用push()方法再次添加元素 ``` my_stack.push('Java') ``` 5. 检查栈中是否有两个元素 ``` print(my_stack.items) ``` 输出应该是['Python', 'Java']。 6. 使用pop()方法弹出栈顶元素 ``` print(my_stack.pop()) ``` 输出应该是'Java'。 7. 再次检查栈中是否只有一个元素 ``` print(my_stack.items) ``` 输出应该是['Python']。 通过这些步骤,我们已经测试了Stack类的push()和pop()方法的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值