Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 03.07.2020
Сообщений: 6
1

Стек на основе массива

13.01.2021, 19:05. Показов 1509. Ответов 4

Доброго времени суток, господа!
У меня есть задание:
Задание 1. Реализовать программу, выполняющую стандартный набор операций со стеком на основе массива:
•проверку пустоты стека
•проверку заполненности стекового массива
•добавление элемента в вершину стека
•удаление элемента из вершины стека
•вывод текущего состояния стека на экран
Требования:
•все действия должны быть оформлены как процедуры или функции
•добавлению/удалению должна предшествовать проверка возможности выполнения этих операций
•главная программа реализует следующий набор действий:
а) инициализация пустого стека
б) организация диалогового цикла с пользователем.

Есть программа написанная на дельфи:
Кликните здесь для просмотра всего текста
Delphi
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
program KNS;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows;
 
const Size = 10;
 
type
 
  TData = Integer;
  TSt = record
    Pnt : Integer;                
    Arr : array[1..Size] of TData;
  end;
 
procedure Init(var aSt : TSt);
begin
  aSt.Pnt := Low(aSt.Arr) - 1;
end;
 
function Push(var aSt : TSt; const aData : TData) : Boolean;
begin
  Push := False;
  if aSt.Pnt < High(aSt.Arr) then begin 
    Inc(aSt.Pnt);
    aSt.Arr[aSt.Pnt] := aData; 
    Push := True;
  end;
end;
 
function Pop(var aSt : TSt; var aData : TData) : Boolean;
begin
  Pop := False;
  if aSt.Pnt >= 1 then begin
    aData := aSt.Arr[aSt.Pnt]; 
    Dec(aSt.Pnt);
    Pop := True;
  end;
end;
 
function IsEmpty(const aSt : TSt) : Boolean;
begin
  IsEmpty := aSt.Pnt = Low(aSt.Arr) - 1;
end;
 
function IsFull(const aSt : TSt) : Boolean;
begin
  IsFull := aSt.Pnt = High(aSt.Arr);
end;
 
procedure StWriteln(const aSt : TSt);
var
  i : Integer;
begin
  if IsEmpty(aSt) then
    Writeln('Стек пуст.')
  else begin
    with aSt do
      for i := Pnt downto Low(Arr) do begin
        if i < Pnt then Write(', ');
        Write(Arr[i]);
      end;
    Writeln;
  end;
end;
 
 
procedure Add(var aSt : TSt);
var
  Data : TData;
  S : String;
begin
  Writeln('Добавление элементов в стек.');
  Writeln('Чтобы прекратить ввод, оставьте пустую строку и нажмите Enter.');
  repeat
    Write('Элемент: ');
    Readln(S);
    if S <> '' then begin
      if TryStrToInt(S, Data) then begin 
        if not Push(aSt, Data) then 
          Writeln('Стек переполнен! Операция отменена!');
      end else
        Writeln('Неверный ввод! Следует ввести целое число. Повторите.');
    end else
      Writeln('Ввод завершён.');
  until S = '';
end;
 
procedure Get(var aSt : TSt);
var
  Data : TData;
  S : String;
begin
  Writeln('Извлечение элементов из стека.');
  Writeln('Чтобы извлечь элемент из стека, нажмите Enter.');
  Writeln('Чтобы прекратить извлечение, введите любой символ и нажмите Enter.');
  repeat
    Write('Извлечь элемент? ');
    Readln(S);
    if S = '' then begin 
      if Pop(aSt, Data) then 
        Writeln(Data)
      else
        Writeln('Стек пуст! Операция отменена!');
    end else
      Writeln('Вывод завершён.');
  until S <> '';
end;
 
var
  St : TSt;
  Cmd : Integer;
begin
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  Init(St);
 
  repeat
    Writeln('1. Очистить стек.');
    Writeln('2. Распечатать стек.');
    Writeln('3. Проверка на пустоту.');
    Writeln('4. Проверка на заполненность.');
    Writeln('5. Добавление в стек.');
    Writeln('6. Извлечение из стека.');
    Writeln('7. Выход');
    Write('Задайте номер команды: ');
    Readln(Cmd);
    case Cmd of
      1 :
      begin
        Init(St);
        Writeln('Стек очищен.');
      end;
      2 :
      begin
        Writeln('Элементы стека в направлении вершина - дно:');
        StWriteln(St);
      end;
      3 :
        if IsEmpty(St) then
          Writeln('Стек пуст.')
        else
          Writeln('Стек не пустой.');
      4 :
        if IsFull(St) then
          Writeln('Стек заполнен.')
        else
          Writeln('Стек не заполнен.');
      5 : Add(St);
      6 : Get(St);
      7 : Writeln('Работа программы завершена.');
      else
        Writeln('Незарегистрированная команда. Повторите ввод.');
    end;
    Write('Для продолжения нажмите любую клавишу.');
    Readln;
  until Cmd = 7;
end.


Мне нужно тоже самое, но на Java. Но я плохо понимаю Java.
Прошу помощи или хотя бы немного объяснить. заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2021, 19:05
Ответы с готовыми решениями:

Стек на основе массива
Банально: создать, добавить, удалить. Без своих &quot;написаний&quot; никак, дело в том, что впритык не...

Стек на основе массива
Здравствуйте! Пожалуйста, подскажите, что за ошибку выдает компилятор: я разбираюсь со структурами...

Стек на основе массива
Помогите реализовать добавление/удаление элементов private void button3_Click(object sender,...

Стек на основе динамического массива
Помогите плизз.... написать лабу на тему стек на основе динамического массива

__________________

Записывайтесь на профессиональные курсы Java-разработчиков
Обучение в Java Mentor с оплатой после трудоустройства
4
2050 / 1151 / 366
Регистрация: 02.09.2015
Сообщений: 3,082
13.01.2021, 19:13 2
Цитата Сообщение от KOTAH Посмотреть сообщение
Реализовать программу, выполняющую стандартный набор операций со стеком на основе массива
На основе массива делаешь динамический массив, затем на его основе уже имплементируешь стек. Ничего сложного.
0
1893 / 1509 / 374
Регистрация: 17.02.2014
Сообщений: 7,613
13.01.2021, 19:31 3
Цитата Сообщение от KOTAH Посмотреть сообщение
хотя бы немного объяснить.
как же нам это сделать, если никто из нас не представляет, ЧТО ты на данный момент знаешь?
0
Arsegg
13.01.2021, 20:05
  #4

Не по теме:

Цитата Сообщение от Aviz__ Посмотреть сообщение
как же нам это сделать, если никто из нас не представляет, ЧТО ты на данный момент знаешь?
Ну решите за меня, позязя! :cry:

0
35 / 28 / 16
Регистрация: 09.02.2015
Сообщений: 117
14.01.2021, 10:38 5
Лучший ответ Сообщение было отмечено KOTAH как решение

Решение

Java
1
2
3
4
5
6
7
public interface ISimpleStack<E> {
 
    void push(E e);
    E pop();
    int size();
    boolean isEmpty();
}
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
public class SimpleStackImpl<E> implements ISimpleStack<E>{
    private Object[] array;
    private final int DEFAULT_INITIAL_CAPACITY = 10;
    private int currentCapacity;
    private int size;
 
    public SimpleStackImpl() {
        this.array = new Object[0];
        this.size = -1;
    }
 
    @Override
    public void push(E e) {
        if(currentCapacity == 0){
            this.array = new Object[DEFAULT_INITIAL_CAPACITY];
            currentCapacity = array.length;
        }
 
        if(currentCapacity - size < 5){
            ensureIncreaseCapacity();
        }
        array[++size] = e;
 
    }
 
    @Override
    public E pop() {
        if(size < 0){
            throw new NullPointerException();
        }
 
        return (E) array[size--];
    }
 
    @Override
    public int size() {
        return size + 1;
    }
 
    @Override
    public boolean isEmpty() {
        return size < 0;
    }
 
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < size; i++) {
            sb.append(array[i] + ",");
        }
 
        return sb.toString();
    }
 
    private void ensureIncreaseCapacity(){
        array = Arrays.copyOf(array, currentCapacity + 5);
        currentCapacity = array.length;
        System.out.println(currentCapacity);
    }
 
    private void ensureDecreaseCapacity(){
        array = Arrays.copyOfRange(array, 0, size);
        currentCapacity = array.length;
    }
}
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2021, 10:38

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Стек на основе статического массива
Здравствуйте! Помогите пожалуйста выполнить задание. Сама уже весь форум облазила и нужного не...

Создать стек на основе массива
Здравствуйте, помогите пожалуйста реализовать задачу. Дан указатель P1 на вершину стека (если стек...

Стек на основе массива (Pascal -> Си++)
Здравствуйте! Язык pascal не знаю совсем! Пробовал сам переводить - получилось не очень. Может у...

Стек на основе динамического массива
Надо написать стек на основе динамического массива. Как выделить память под новый элемент? ...

Стек на основе статического массива
Пожалуйста помогите, мне скоро сдавать работы а многое не доделал. Напишите пожалуйста эти...

Стек на основе вектора, линейного массива
Дан текст из слов (в input.txt), слова разделены любыми знаками препинания, найти сочетания с ph,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.