在堆栈中获取相等的值

时间:2014-11-27 06:03:21

标签: java data-structures stack

我正在java上做一个堆栈,它包含五个整数,但我必须打印出只有值相等的值。

示例1 - 2 - 2 - 3 - 4 相同的数字是:2

如何确定哪些号码相同?

这是我的代码:

package e.d_pilas;

import java.util.*;

public class ED_PILAS {
    private int stck[];
    private int tos;

    ED_PILAS(int size){
        //New stack
        stck = new int[size];
        tos = -1;
    }

    void push(int value) {
        stck[++tos] = value;
    }

    int pop() {
        if (tos < 0) {
            return 0;
        } else
            return stck[tos--];
    }

    public static void main(String[] args) {
        int number;
        Scanner read = new Scanner (System.in);
        System.out.print("Enter five (5) numbers to fill the stack \n");
        ED_PILAS stack = new ED_PILAS(5);

        for (int i = 1; i < 6; i++){
            System.out.print("Enter the value "+i+" to fill the stack \n");
            number=read.nextInt();
            stack.push(number); 
        }
        System.out.println("Equal values contained in the stack: \n");

        for (int j = 1; j < 6; j++){
            System.out.println("\t " + stack.pop());    
        } 
    }
}

谢谢!

4 个答案:

答案 0 :(得分:0)

当您从堆栈中pop()时,您可以存储在ArrayList<Integer>中并检查每个pop()是否已存在。如果重复,则将其打印并将其标记为已打印(以便您不再打印)。

答案 1 :(得分:0)

在第一种方法中,它只会打印一次重复条目。在第二种方法中,如果堆栈包含两个以上的条目,它将多次打印。

        ArrayList<int> list=new ArrayList<int>();

        for (int j = 1; j < 6; j++){
            int num=stack.pop();
            if(list.contains(num)){
               System.out.println(num);
            }
            else{
                 list.add(num);
            }

        } 

stack.pop()方法删除元素,然后使用stack.search()方法查找重复项

            for (int j = 1; j < 6; j++){
             int num=stack.pop();
             if(stack.search(num)==1){
               System.out.println(num);
            }
            else{

            }

        } 

答案 2 :(得分:0)

使用此逻辑,它将适用于连续相同的值,否则使用ArrayList:

int n=stack.pop(); int dummy; for (int j = 1; j < 6; j++){ dummy=stack.pop(); if(n==dummy) { System.out.println("\t The same number is " + n); } else{ n=dummy; }

答案 3 :(得分:0)

使用ArrayList存储以前的pop#d值。如果在弹出过程中再次看到此值,只需打印数字。

ArrayList<Integer> popdList=new ArrayList<Integer>();

for (int j = 1; j < 6; j++){
    int value=stack.pop();
    if(popdList.contains(value){
        System.out.println(value);
     } else{
         popdList.add(value);
     }
} 

More info on ArrayLists

此外,您可以编辑弹出功能,而不是更改主要功能,只返回重复的值,如下所示:

ArrayList<Integer> popdList=new ArrayList<Integer>();

int pop() {
    if (tos < 0) {
        return 0;
    } else {
        int value = stck[tos--];
        if(popdList.contains(value){
            return value;
        } else{
            popdList.add(value);
        }
    }
}