题目 请实现一个MyQueue类,实现出队,入队,求队列长度. 实现入队函数 void push(int x); 实现出队函数 int pop(); 实现求队列长度函数 int size(); 输入格式: 每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作: 1 x : 表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 : 表示求队列长度。 输出格式: 对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素。 对于操作3,请输出队列长度。 每个输出项最后换行。 输入样例: 5 3 2 1 100 3 2 输出样例: 0 Invalid 1 100 这道题是一道简单题,才10分 直接上代码 MyQueue类
class MyQueue{ int Size = 0; //数组长度 int num[1000000];//别吐槽这个长度的数组 public: void push(int x){ num[Size++] = x; //入栈时Size++ } int pop(){ return num[--Size]; //出栈时--Size } int size(){ return Size; //返回数组长度 } };主函数
int main(){ int n; cin>>n; //输入操作次数 int opera; MyQueue mq; int result; for(int i=0;i < n;i++){ cin>>opera; switch(opera){ case 1: int x; cin>>x; mq.push(x); break; case 2: result=mq.size(); if(result){ cout<<mq.pop()<<endl; }else{ cout<<"Invalid"<<endl; } break; case 3: cout<<mq.size()<<endl; break; default:break; } } return 0; }这道题之所以卡住我,就是我对栈不太熟悉,只了解了个大概:压栈(入栈)和弹栈(出栈),问题就出在-Size那里,没错,我弹栈没有把长度-1,当然我写成一个数组问题也很大,应该写成指针的
一开始我是以为是用了数组的缘故,因为我的旧笔电是16年的,我哥送我用的,疫情,台式在家,显示器在学校,眼睛盯着11.6寸的显示器挺累的,就用了笔记本,数组搞10^6的话运行会停止,之所以会发现这个问题就在于我昨天试了一下Java模拟链表,链表搞到5835个节点之后jvm就出问题了,而手机用aide试了一下能达到11753个节点,明显不对头,应该是机子的问题,之后再找找原因
之后来了 直接上代码,有改动的部分
class MyQueue{ int Size = 0; int num[10]; public: void push(int x){ *(num+Size) = x; Size++; } int pop(){ return *(num+(--Size)); } int size(){ return Size; } };指针会从num[0]开始去访问内存,所以不用担心num给的空间不足,设置成数组就是走个形式,直接上指针是存不了数据的