Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12

Создать структуру, реализующую стек целых чисел типа LIFO

31.10.2010, 11:58. Показов 7834. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать структуру, реализующую стек целых чисел типа LIFO. Данные структуры: массив стека, указатель на вершину стека. Создать функции: запись в вершину стека, чтение вершины стека.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2010, 11:58
Ответы с готовыми решениями:

Создать структуру, реализующую очередь целых чисел типа FIFO
Помогите пожалуйста как будет выглядеть программа : создать структуру , реализующую очередь целых чисел типа FIFO . данные структуры :...

Описать класс, реализующий стек целых чисел типа LIFO.
Методы класса: а) создание стека; б) добавление элемента в стек (функция push); в) выбор элемента из стека, удаляя его из стека...

Создать стек из случайных целых чисел
Создать стек из случайных целых чисел. Перенести в другой стек все элементы ,находящиеся между вершиной и элементом с минимальным...

14
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
31.10.2010, 13:15
И в чём проблема?
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
31.10.2010, 13:44
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define N 1000  // Размер стека
struct {
   int L; // Заполненность стека
   int *p;
   int M[N];
} Stac = { 0 };
Push(int k) // Положить в стек
{
  if (Stac.L >= Stac.N-1) return;  // Стек переполнен
  Stac.M[L] = k;
  Stac.p = Stac.M+Stac.L;
  Stac.L++;
}
int Pop() // Чтение вершины
{
  if (Stac.L=0) return 0;  // Стек пуст
  Stac.L--;
  return Stac.p--;
}
0
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12
31.10.2010, 14:13  [ТС]
Цитата Сообщение от volovzi Посмотреть сообщение
И в чём проблема?
Не могу реализовать чтение вершины и запись в вершину стэка. Программу к сожалению не могу показать у меня нету ее
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
31.10.2010, 14:50
У тебя в задании уже практически расписано решение. Напиши свой вариант, и посмотрим, что можно будет исправить.
Программой тов. Day не пользуйся, там ошибки.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.11.2010, 07:10
C
1
2
3
4
5
6
int Pop() // Чтение вершины
{
  if (Stac.L=0) return 0;  // Стек пуст
  Stac.L--;
  return Stac.p--;
}
если бы здесь был правильный код, то в стек нельзя бы было положить ноль
0
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12
01.11.2010, 10:20  [ТС]
вот у меня какая прога получилась
C++
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
#include<iostream.h>
struct Stack
{
       int V[10];
       int *Ptr;
       };
void vvod (Stack &);
void chtenie (Stack &);
void init (Stack &);
main()
{
      Stack S; int i;
      init (S);
      for (i=0; i<10; i++)
      vvod (S);
      chtenie (S);
      system ("Pause");
      return 0;
}
void init (Stack&strc)
{
     strc.Ptr=&(strc.V[0]);
}
void vvod (Stack&strc)
{
     cout<<"Input Stack Elements"<<endl;
     cin>>strc.V[0];
     strc.Ptr=strc.Ptr+1;
}
void chtenie (Stack&strc)
{
     cout<<"Stack Elements "<<strc.V[0]<<endl;
     strc.Ptr=strc.Ptr-1;
}
0
 Аватар для KpeHDeJIb
57 / 57 / 5
Регистрация: 31.10.2010
Сообщений: 103
01.11.2010, 11:57
Пожалуй самый простой вариант с динамически выделяемой памятью будет таким:
C++
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
#include <iostream>
 
struct Stack
{
public:
    Stack(): m_items(NULL), m_count(0)
    {
    }
 
    ~Stack()
    {
        delete[] m_items;
    }
 
    void push(int value)
    {
        int *temp = new int[m_count + 1];
 
        for (unsigned i = 0; i < m_count; ++i)
            temp[i] = m_items[i];
 
        temp[m_count] = value;
 
        delete[] m_items;
        m_items = temp;
 
        ++m_count;
    }
 
    int pop()
    {
        int value, *temp = NULL;
 
        if (m_count == 0)
        {
            return 0;
        }
 
        --m_count;
 
        value = m_items[0];
 
        if (m_count != 0)
        {
            temp = new int[m_count];
 
            for (unsigned i = 0; i < m_count; ++i)
                temp[i] = m_items[i];
 
            value = m_items[m_count];
        }
 
        delete[] m_items;
        m_items = temp;
 
        return value;
    }
 
    unsigned size() const
    {
        return m_count;
    }
 
private:
    int      *m_items;
    unsigned m_count;
};
 
int main()
{
    Stack stack;
 
    for (unsigned i = 0; i < 100; ++i)
        stack.push(i);
 
    while (stack.size())
        std::cout << stack.pop() << std::endl;
 
    return 0;
}
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
01.11.2010, 12:57
Цитата Сообщение от accept Посмотреть сообщение
C
1
2
3
4
5
6
int Pop() // Чтение вершины
{
  if (Stac.L=0) return 0;  // Стек пуст
  Stac.L--;
  return Stac.p--;
}
если бы здесь был правильный код, то в стек нельзя бы было положить ноль
Согласен.
Просто не хотел усложнять код введением еще одной переменной для ошибки.
Так что мой код можно рассматривать, как набросок.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
01.11.2010, 17:47
Balls, нормально, только инициализацию и функции записи и чтения надо сделать методами класса, а ещё добавить метод-проверку на пустоту стека.
Вариант Кренделя ничего, но не соответствует (насколько я понял) заданию, и в нём неэффективная работа с памятью.
Вообще, на плюсах создание такого класса смысла не имеет, потому что есть std::stack. Было бы лучше писать на Си. Но раз уж такое задание, то предлагаю следующий вариант:
C++
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
#include <iostream>
 
#define SIZE 10
 
class stack {
public:
    stack () : top(0) {}
    
    void push (int number) {
        if (is_empty()) top = items;
        else ++top;
        
        *top = number;
    }
    
    int pop () {
        int result = *top;
        
        if (top == items) top = 0;
        else --top;
        
        return result;
    }
    
    void clear () { top = 0; }
    
    bool is_empty () const { return top == 0; }
    bool is_full () const { return !is_empty() && (top >= items + SIZE - 1); }
 
private:
    int items[SIZE];
    int * top;
};
 
int main (int argc, char * const argv[]) {
    stack s;
    
    for (int i = 0; !s.is_full(); ++i) s.push(i);
    
    while (!s.is_empty()) std::cout << s.pop() << " ";
 
    return 0;
}
0
 Аватар для KpeHDeJIb
57 / 57 / 5
Регистрация: 31.10.2010
Сообщений: 103
01.11.2010, 18:42
Цитата Сообщение от volovzi Посмотреть сообщение
Вариант Кренделя ничего, но не соответствует (насколько я понял) заданию, и в нём неэффективная работа с памятью.
Ну должно же быть похоже на работу студента

На Си можно по быстрому что-то в таком духе зарядить, не расширяемый стек:
C
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
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 
typedef int item_t;
 
typedef struct {
    unsigned reserved, size;
    item_t   items[];
} stack_t;
 
stack_t *stack_create(unsigned reserved)
{
    stack_t *stack  = malloc(sizeof(stack_t) + reserved * sizeof(item_t));
    stack->reserved = reserved;
    stack->size     = 0;
 
    return stack;
}
 
void stack_destroy(stack_t *stack)
{
    free(stack);
}
 
void stack_push(stack_t *stack, int value)
{
    assert(stack);
    assert(stack->size < stack->reserved);
 
    stack->items[stack->size++] = value;
}
 
item_t stack_pop(stack_t *stack)
{
    assert(stack);
    assert(stack->size);
 
    return stack->items[--stack->size];
}
 
int main()
{
    unsigned i, n = 10;
    stack_t *stack = stack_create(n);
 
    for (i = 0; i < n; ++i)
        stack_push(stack, i);
 
    while (stack->size)
        printf("stack top: %d\n", stack_pop(stack));
 
    stack_destroy(stack);
 
    return 0;
}
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
01.11.2010, 19:01
KpeHDeJIb, ага, типтого. Только у них в задании написано про работу с указателем на вершину стека. Мне кажется, это ключевой момент.
0
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12
01.11.2010, 22:29  [ТС]
Блин это ваще лаба по программированию) Я просто не шарю в С++ вобще)
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
01.11.2010, 22:48
Balls, это ты к чему? Тебе уже дали кучу подсказок и даже несколько рабочих вариантов. Бери, разбирайся и начинай шарить .
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
02.11.2010, 02:00
Цитата Сообщение от Day Посмотреть сообщение
Согласен.
Просто не хотел усложнять код введением еще одной переменной для ошибки.
Так что мой код можно рассматривать, как набросок.
если туда положить 1000 элементов, а в середине будет ноль
то при чтении стека, будет прочитано только полстека
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2010, 02:00
Помогаю со студенческими работами здесь

Из введенных целых чисел сформировать два списка типа стек с одинаковым количеством элементов.
Из введенных целых чисел сформировать два списка типа стек с одинаковым количеством элементов. Разработать функцию, какая соединает два...

Создать стек целых чисел на основе статического массива.
Создать стек целых чисел на основе статического массива. Реализовать методы : Добавить элемент, удалить элемент, вершина стека. На...

Создать стек из случайных целых чисел и отсортировать элементы по возрастанию (убыванию)
Здраствуйте!Можете помочь с заданием???Дана программа: #include &lt;iostream&gt; #include &lt;malloc.h&gt; using namespace std; /* run...

Создать класс СПИСОК целых чисел. Разработать класс СТЕК
&quot;Создать класс СПИСОК целых чисел. Разработать класс СТЕК, который вмещает объект класса СПИСОК. Определить необходимые конструкторы,...

Создать класс "Стек целых чисел"
c++ Создать класс Стек целых чисел, производный от класса Список целых чисел, переопределить для него операции: а) «+=» –...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru