#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())