#jx0701. 栈和队列选择题
栈和队列选择题
一、单选题
第 1 题
1.已知队列(13,2,11,34,41,77,5,7,18,26,15),第一个进入队列的元素是13,则第五个出队的元素是( )。
{{ select(1) }}
- 5
- 41
- 77
- 13
二、程序代码填空
排队问题
【问题描述】 有n个人排队,每个人有一个编号i(1≤i≤n),从左往右"1,2,1,2,… " 报数,报到"1"的人出列,数到"2"的人立即站到队伍的最右端。报数过程反复进行,直到n个人都出列为止。已知n个人原来的顺序,请写出他们的出列顺序。 【输入描述】 第一行为n( n≤100 ),第二行为n个编号i( 1≤i≤n),且i不会重复。 【输出描述】 一行,为他们的出列编号。 【输入样例1】 8 1 2 3 4 5 6 7 8 【输出样例1】 1 3 5 7 2 6 4 8 【输入样例2】 4 2 5 1 3 【输出样例2】 2 1 5 3
#include<bits/stdc++.h>
using namespace std;
int q[200],front,rear;//1. 创建数组模拟队列
void push(int x){ //入队 -2 定义队列的操作函数
if(rear<200){
q[rear]=x;
__①__;
}
}
void pop(){//出队
if(front!=rear){
__②__;
}
}
int getFront(){//获得队首元素
return q[front];
}
int size(){//获得队列长度
return rear-front;
}
int main(){
int n,num;
cin>>n;//人数
for(int i=1;i<=n;i++){//3. 执行入队
cin>>num;
__③__;
}
int k=1;//报的数字
while(size()!=0){//4. 只要队列不为空,就判断
if(k%2!=0){//k是奇数
cout<<__④__<<" ";//输出队首元素
}else{
__⑤__;//队首元素进入队尾
}
pop();//执行出队操作
__⑥__;
}
return 0;
}
第 2 题 ①处应该填写 {{ select(2) }}
- front++
- front--
- rear++
- rear--
第 3 题 ②处应该填写 {{ select(3) }}
- front++
- front--
- rear++
- rear--
第 4 题 ③处应该填写 {{ select(4) }}
- push(num)
- pop(num)
- push()
- pop()
第 5 题 ④处应该填写 {{ select(5) }}
- size()
- push(num)
- pop()
- getFront()
第 6 题 ⑤处应该填写 {{ select(6) }}
- push(size())
- push(num)
- push(getFront())
- getFront()
第 7 题 ⑥处应该填写 {{ select(7) }}
- k-=size()
- k+=size()
- k--
- k++
括号匹配问题
【题目描述】 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,但需要成对出现。即()或 [([ ][ ])]等为正确的格式,[ ( ] )或 ( [ ( ) )或( ( ) ] )均为不正确的格式。 给定一串括号输入(换行作为结束符),检测格式是否正确,若正确输出YES;错误输出NO。(括号数量≤100) 【样例输入】 () 【样例输出】 YES
#include<bits/stdc++.h>
using namespace std;
char a[6],top; //注意栈中存储数据的类型char
//定义字符型数组模拟栈并并编写入栈、出栈、获取栈顶元素三个函数。
void push(int x){ //入栈
if(top<5){
top++;
a[top]=x;
}
}
void pop(){ //出栈
if(top>0){
top--;
}
}
char getTop(){ //获得栈顶元素 //注意栈中存储数据的类型char
return a[top];
}
void clear(){ //清空栈
top=0;
}
int main(){
string s;
cin>>s;//以字符串方式输入表达式。
// 循环枚举表达式,判断。
int len=s.size();
for(int i=0;i<len;i++){
if(s[i]=='(' __①__ s[i]=='[')
__②__; //左括号入栈
else if(s[i]==')' && getTop()=='(' || s[i]==']' && getTop()=='[')
__③__; //右括号,且栈顶为左括号,则栈顶元素出栈
else{//右括号且栈空
cout<<"NO";
return 0;
}
}
//④ 判断最终栈的状态。
if(top==0) cout<<"YES";
else cout<<"NO";
return 0;
}
第 8 题 ①处应该填写 {{ select(8) }}
- ++
- &&
- ||
- !
第 9 题 ②处应该填写 {{ select(9) }}
- push(s)
- push(s[i])
- pop()
- getTop()
第 10 题 ③处应该填写 {{ select(10) }}
- clear()
- pop()
- push(s[i])
- push(getTop())