0904
0903
栈和队列是重要的数据结构。栈是“先进后出”(FILO)的数据结构,而队列是“先进先出”(FIFO)的数据结构。
给出进入结构和离开结构的一些整数次序(假定栈和队列中存储的都整数),请确定这个数据结构是栈还是队列。
假设所有数据在结束进入之前是不允许离开的。
输入要求:
包含多个测试用例。
输入的第一行是一个整数T,表示测试用例的个数。然后给出T个测试用例。
每个测试用例包含3行:第一行给出一个整数N(1<=N<=100),表示整数个数。第二行给出用空格分隔的N个整数,
表示进入结构的次序(即第一个数据最先进入)。第三行给出用空格分隔的N个整数,表示离开结构的次序
(第一个数据是先离开)。
输出要求:
对于每个测试用例,在一行中输入判定结果。
如果结果只能是一个栈,则输出“stack”;如果结构只能是一个队列,则输出“queue”;如果结构既可以是栈,
也可以是队列,则输出“both”,否则输出“neither”。
数据示例1:
输入:
4
3
1 2 3
3 2 1
3
1 2 3
1 2 3
3
1 2 1
1 2 1
3
1 2 3
2 3 1
输出:
stack
queue
both
neither
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int N,a[101],b[101];
cin>>N;
for(int i=0;i<N;i++)cin>>a[i];
for(int i=0;i<N;i++)cin>>b[i];
bool flag1=1,flag2=1;
for(int i=N-1, j=0;i>=0;i--,j++){
if(b[i]!=a[j]){
flag1=0;
break;
}
}
for(int i=0,j=0;i<N;i++,j++){
if(b[i]!=a[j]){
flag2=0;
break;
}
}
if(flag1==1&&flag2==0)cout<<"stack"<<endl;
if(flag1==0&&flag2==1)cout<<"queue"<<endl;
if(flag1==1&&flag2==1)cout<<"both"<<endl;
if(flag1==0&&flag2==0)cout<<"neither"<<endl;
}
return 0;
}
0902
使用栈,对一个字符串进行逆置操作。
输入要求:
原字符串
输出要求:
逆置后的字符串,不用换行
数据示例1:
输入:
abcd
输出:
dcba
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Node{
char str[MAXSIZE];
int top;
}SeqStack;
void InitStack(SeqStack &S) {
S.top=-1;
}
int StackEmpty(SeqStack &S)
{
if(S.top==-1)
return true;
else
return false;
}
int Push(SeqStack &S,char x)
{
if(S.top==MAXSIZE-1)
return false;
else
{
S.top++;
S.str[S.top]=x;
return true;
}
}
char Pop(SeqStack &S)
{
char x;
if(S.top==-1)
printf("栈空");
else
{
x=S.str[S.top];
S.top--;
return x;
}
return 0;
}
int main(){
char str[MAXSIZE];
SeqStack S;
int i;
gets(str);
InitStack(S);
for (i=0;str[i]; i++)
{
Push(S, str[i]);
}
while (!StackEmpty(S))
{
putchar(Pop(S));
}
return 0;
}
0901
计算使用BF算法进行字符串匹配时,字符比较次数
输入要求:
输入2行。第1行输入主串,第二行输入模式串,长度均不超过80。
输出要求:
使用BF算法进行模式匹配时,字符比较次数。不用换行
输入:
aabbabaabaaaa
aabaaa
输出:
17
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXS 80
typedef struct{
char *ch;
int length;
} HString;
void createString(HString &S){
S.ch = new char[MAXS];
gets(S.ch+1);
S.length = strlen(S.ch+1);
}
int charCompBF(HString S, HString T);
int main(){
HString S, T;
createString(S);
createString(T);
int num = charCompBF(S, T);
printf("%d", num);
}
int charCompBF(HString S, HString T){
int i=1,j=1,c=0;
while(i<=S.length&&j<=T.length){
if(S.ch[i]==T.ch[j]){
c++;
i++;j++;
}
else{
i=i-j+2;j=1;c++;
}
}
return c;
}