算法9--栈

P1427 小鱼的数字游戏--洛谷

我们用栈来实现

java:

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Stack<Integer> stack = new Stack<>();
        
        // 输入一串整数
        while (true) {
            int num = scanner.nextInt();
            if (num == 0) {
                break;
            }
            stack.push(num);
        }
        
        // 反着输出整数
        while (!stack.isEmpty()) {
            System.out.print(stack.pop() + " ");
        }
    }
}

c++:

#include<iostream>
using namespace std;
int a[101];//如果你的第一个数存储在a[1]里,一定要多开一两个空间 ,以防越界访问
int top=0,c;
int main(){
	while(1){
		cin>>c;
		if(c==0) break;
		a[++top]=c;
		/*
		或者写成:
		top++;
		a[top]=c;
		个人比较喜欢压码……
		*/ 
	}
	while(top!=0){
		cout<<a[top--]<<" ";
		/*
		或者写成:
		cout<<a[top];
		top--;
		*/ 
	}
	return 0;
} 

P1739 表达式括号匹配 --洛谷

 

java:

import java.util.Stack;

public class BracketMatching {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in)
        String expression = scanner.nextLine()+"@";
        
        if (checkBracketMatching(expression)) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
    
    public static boolean checkBracketMatching(String expression) {
        Stack<Character> stack = new Stack<>();
        
        for (int i = 0; i < expression.length(); i++) {
            char ch = expression.charAt(i);
            
            if (ch == '(') {
                stack.push(ch);
            } else if (ch == ')') {
                if (stack.isEmpty()) {
                    return false; // 右括号多于左括号,不匹配
                }
                
                stack.pop();
            }
        }
        
        return stack.isEmpty(); // 左括号多于右括号,不匹配
    }
}

c++: 

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
using namespace std;

char n;

struct Stack{
	int top,a[100000];
	void inti(){top=0;}//创建一个空栈 
	void push(int x){a[++top]=x;}//在栈顶插入元素 
	void pop(){if(top) top--;}//删除栈顶元素 
	int empty(){if(top>0) return 0;else return 1;}//判断栈是否为空 
	int quary(){return a[top];}//返回栈顶值 
}z;

int main(){
	z.inti();
	while(cin>>n){//循环输入 
		if(z.empty()){
			if(n==')'){//判断第一个是否为),如果是,就不可能匹配 
				cout<<"NO";
				return 0;
			}
		}
		if(n=='(') z.push(n);//入栈 
		if(n==')') z.pop();//出栈 
	}
	if(z.empty()) cout<<"YES";//判断栈是否为空,是就输出yes,不是输出no 
	else cout<<"NO";
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值