数据结构09

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; 
  
  //判断是否是stack;
  
  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;
        
    }
}
//出栈 (在这里我们将栈顶元素的值存在x中,并将这个值返回)
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));//输出调用Pop函数返回的栈顶元素(存在x中)
    }
    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); 
}

// 使用BF算法进行模式匹配,字符比较次数 
int charCompBF(HString S, HString T);

int main(){
 HString S, T;
 createString(S);
 createString(T);
 int num = charCompBF(S, T);
 printf("%d", num); 
}


// 使用BF算法进行模式匹配,字符比较次数
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;
}

おすすめ

転載: blog.csdn.net/unhere123/article/details/116035514