Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 1
Регистрация: 14.03.2014
Сообщений: 46

Stack Java на массивах

27.03.2014, 08:49. Показов 1716. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста разобраться: есть код как переделать его так, чтобы стек был реализован на основе массива?
Stack.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Iterator;
 
public class Stack<T> implements Iterable<T> {
    private class Node {
        private T value;
        private Node next;
        
        public Node(T val, Node last) {
            value = val;
            next = last;
        }
        public T getValue() {
            return value;
        }
        public Node getNext() {
            return next;
        }
    }
    
    private Node top;
    
    private class StackIterator implements Iterator<T> {
 
        public boolean hasNext() {
            return ( top != null ) ;
        }
 
        public T next() {
            T ret = top.getValue();
            top = top.getNext();
            return ret;
        }
 
        public void remove() {
            
        }
        
    }
 
    public Iterator<T> iterator() {
        return new StackIterator();
    }
    
    void push(T value) {
        top = new Node(value, top);
    }
}

StackTester.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Iterator;
 
public class StackTester {
    public static void main(String[] args) {
        Stack<Integer> intStack = new Stack<Integer>();
        intStack.push(1);
        intStack.push(2);
        intStack.push(3);
        
        Iterator<Integer> intIterator = intStack.iterator();
        while ( intIterator.hasNext() )
            System.out.println(intIterator.next().toString());
        
        Stack<String> strStack = new Stack<String>();
        strStack.push("any");
        strStack.push("many");
        strStack.push("money");
        strStack.push("more");
        
        Iterator<String> strIterator = strStack.iterator();
        while ( strIterator.hasNext() )
           System.out.println(strIterator.next());
        
        Stack<Person> persons = new Stack<Person>();
        persons.push(new Person("Сидоров", 43));
        persons.push(new Person("Петров", 45));
        persons.push(new Person("Иванов", 44));
        
        
        Iterator<Person> person = persons.iterator();
        while ( person.hasNext() )
            System.out.println(person.next());
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2014, 08:49
Ответы с готовыми решениями:

Java Infix to Postfix Stack
хоть это и не сюда. может кто поможет. в другом разделе никто не отвечает Infix to Postfix Stack можно использовать только 0-9 + * ...

Java.lang.VerifyError: Bad type on operand stack
Имеется jre 8.0.152, если это важно, стабильно возвращающий ошибку из названия темы. Ниже приведен максимально урезанный код, на котором...

[bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>'
Возникает ошибка File1.cpp(19): E2316 'Stack&lt;T&gt;::Stack()' is not a member of 'Stack&lt;T&gt;' #pragma hdrstop #pragma argsused ...

8
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
28.03.2014, 15:35
Загляните в класс ArrayList, это практически готовый стек.
0
0 / 0 / 1
Регистрация: 14.03.2014
Сообщений: 46
28.03.2014, 15:52  [ТС]
не понятно все равно
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
28.03.2014, 16:18
что не понятно?
скажем, почему список - это готовый стек, это понятно?
0
0 / 0 / 1
Регистрация: 14.03.2014
Сообщений: 46
28.03.2014, 16:51  [ТС]
понятно) вся проблема в итераторе
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
28.03.2014, 17:10
ну и посмотрите, как там сделан итератор.
0
0 / 0 / 1
Регистрация: 14.03.2014
Сообщений: 46
28.03.2014, 17:27  [ТС]
где там?
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
28.03.2014, 18:29
http://www.docjar.com/html/api... .java.html
со строки 300
проверки комодификации можно пропустить
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
30.03.2014, 04:27
lesya1, Вам уже и несколько реализаций приводили, и я Вас просил темы не дублировать...
ArrayStack.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package easybudda.arraystack;
 
import java.util.Iterator;
 
public class ArrayStack<T> implements Iterable<T> {
    private Object[] array;
    private int capacity;
    private int top;
    
    @SuppressWarnings("serial")
    public static class StackIsFullException extends Exception {
        public StackIsFullException(String s) {
            super(s);
        }
    }
    
    @SuppressWarnings("serial")
    public static class StackIsEmptyException extends Exception {
        public StackIsEmptyException(String s) {
            super(s);
        }
    }
    
    public ArrayStack(int capacity) throws IllegalArgumentException {
        this.capacity = capacity;
        if ( capacity < 1 )
            throw new IllegalArgumentException();
        array = new Object [ capacity ];
        top = 0;
    }
    
    public boolean isEmpty() {
        return ( top == 0 );
    }
    
    public boolean isFull() {
        return ( top == capacity );
    }
    
    public void push(T value) throws StackIsFullException {
        if ( isFull() )
            throw new StackIsFullException("Satck is full! Value " + value + " rejected.");
        array[top++] = value;
    }
    
    @SuppressWarnings("unchecked")
    public T pop() throws StackIsEmptyException {
        if ( isEmpty() )
            throw new StackIsEmptyException("Stack is empty!");
        return (T)array[--top];
    }
 
    @Override
    public Iterator<T> iterator() {
        return new Iterator<T>() {
 
            @Override
            public boolean hasNext() {
                return ( ! isEmpty() );
            }
 
            @Override
            public T next() {
                try {
                    return pop();
                }
                catch ( StackIsEmptyException e ) {
                    return null;
                }
            }
 
            @Override
            public void remove() {
                
            }
            
        };
    }
}
Test.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package easybudda.arraystack;
 
import java.util.Iterator;
 
public class Test {
 
    public static void main(String[] args) {
        ArrayStack<Integer> stack = new ArrayStack<Integer>(3);
        
        for ( int i = 0; i < 4; ++i ) {
            try { 
                stack.push(100 + i + 1);
            }
            catch ( ArrayStack.StackIsFullException e ) {
                System.out.println(e.getMessage());
            }
        }
        
        Iterator<Integer> it = stack.iterator();
        while ( it.hasNext() )
            System.out.println(String.valueOf(it.next()));
        
        try {
            int notExists = stack.pop();
            System.out.println(String.valueOf(notExists));
        }
        catch ( ArrayStack.StackIsEmptyException ee ) {
            System.out.println(ee.getMessage());
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2014, 04:27
Помогаю со студенческими работами здесь

Парадокс в массивах Java Script
Друзья, здравствуйте Столкнулся с, казалось бы, абсурдным случаем при работе с массивами в javascript Есть 100 строк в текстовом файле...

Full-stack developer (Java/JS) Grid Dynamics, S-Petersburg
We are looking for a Senior Full-Stack developer for one of the world's fastest growing financial companies with an office in the financial...

Есть ли связь между STL-stack и stack - высокопроизводительная память?
Куча источников, как всегда много отсебятины, в общем я запутался...

error C2440: 'return' : cannot convert from 'stack<X>' to 'stack<X> *'
Пишу класс PersonKeeper, в нем readPersons(должен считывать информацию о людях из входного потока (файла), создавать на основе этой...

В массивах G(8), K(19) определить кол-во и произведение элементов меньших 26 в двух заданных массивах (6;34)
Задать два одномерных массива значений, чтобы величины элементов массивов попадали в заданный интервал на всем его диапазоне ( значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru