Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Стеки на Си, и Си++

Сообщений 1 страница 2 из 2

1

Про стеки на Си я напишу сейчас, а версию на Си++ напишу позжа. Итак погнали:

Код:
#include <stdio.h>
#define STACK_SIZE    5     // Максимальный размер стека
int stack[STACK_SIZE];            // Инициализация массив, размер массива берётся из константы STACK_SIZE, в данном пример STACK_SIZE=5
int stack_index = STACK_SIZE; // Текущая позиция стека последняя

// Добавляет в массив значение
void push(int value) {
  // Если stack_index больше 0, то:
  if(stack_index > 0) {
    stack[stack_index] = value;    // Сохраняем значение
    stack_index -- ; // Отнимаем stack_index
  }
}

// Вытаскивает значение из массива
int pop() {
  // Если stack_index ещё меньше STACK_SIZE, ну в нашем случае меньше 5, то:
  if(stack_index < STACK_SIZE) {
    stack_index++; // увеличиваем stack_index
    return stack[stack_index]; // Возвращаем значение массива stack
   }
}

// Главная процедура
int main(int argc, char **argv) {
  push(5); // Добавляет 5 в стек,  stack_index = 4
  push(7);  // Добавляет 7 в  стек, stack_index = 3
  printf("\n%d", pop()); // Вытаскивает 7, stack_index = 3
  printf("\n%d", pop()); // Вытаскивает 5, stack_index = 4
  push(3); // Добавляет 3 в стек, stack_index =  4
  printf("\n%d", pop());  // Вытаскиеват 3, stack_index = 4
  return 0;
}

Результат:

Код:
7
5
3

0

2

Вот пример на Си++:

Код:
#include <iostream>
#include <stack>
using namespace std;

// Главная процедура
int main(int argc, char **argv) {
  stack<int> demo_stack; // Стек
  demo_stack.push(5);  // Добавляем в стек 5
  demo_stack.push(7);  // Добавляем в стек 7
  // Цикл пока стек не пустой
  while (!demo_stack.empty()) {
    cout << demo_stack.top() << endl; // Возвращает значение элемента
    demo_stack.pop(); // Вытаскиваем из стека
  }
  return 0;
}

Результат:

Код:
7
5

0