Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
Balls
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12
31.10.2010, 11:58     Создать структуру, реализующую стек целых чисел типа LIFO #1
Создать структуру, реализующую стек целых чисел типа LIFO. Данные структуры: массив стека, указатель на вершину стека. Создать функции: запись в вершину стека, чтение вершины стека.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2010, 11:58     Создать структуру, реализующую стек целых чисел типа LIFO
Посмотрите здесь:

Из введенных целых чисел сформировать два списка типа стек с одинаковым количеством элементов. C++
C++ Описать класс, реализующий стек целых чисел типа LIFO.
C++ Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла.
Создать стек целых чисел на основе статического массива. C++
C++ Создать шаблон класса типа стек
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
31.10.2010, 13:15     Создать структуру, реализующую стек целых чисел типа LIFO #2
И в чём проблема?
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
31.10.2010, 13:44     Создать структуру, реализующую стек целых чисел типа LIFO #3
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--;
}
Balls
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12
31.10.2010, 14:13  [ТС]     Создать структуру, реализующую стек целых чисел типа LIFO #4
Цитата Сообщение от volovzi Посмотреть сообщение
И в чём проблема?
Не могу реализовать чтение вершины и запись в вершину стэка. Программу к сожалению не могу показать у меня нету ее
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
31.10.2010, 14:50     Создать структуру, реализующую стек целых чисел типа LIFO #5
У тебя в задании уже практически расписано решение. Напиши свой вариант, и посмотрим, что можно будет исправить.
Программой тов. Day не пользуйся, там ошибки.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.11.2010, 07:10     Создать структуру, реализующую стек целых чисел типа LIFO #6
C
1
2
3
4
5
6
int Pop() // Чтение вершины
{
  if (Stac.L=0) return 0;  // Стек пуст
  Stac.L--;
  return Stac.p--;
}
если бы здесь был правильный код, то в стек нельзя бы было положить ноль
Balls
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12
01.11.2010, 10:20  [ТС]     Создать структуру, реализующую стек целых чисел типа LIFO #7
вот у меня какая прога получилась
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;
}
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
01.11.2010, 11:57     Создать структуру, реализующую стек целых чисел типа LIFO #8
Пожалуй самый простой вариант с динамически выделяемой памятью будет таким:
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;
}
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
01.11.2010, 12:57     Создать структуру, реализующую стек целых чисел типа LIFO #9
Цитата Сообщение от accept Посмотреть сообщение
C
1
2
3
4
5
6
int Pop() // Чтение вершины
{
  if (Stac.L=0) return 0;  // Стек пуст
  Stac.L--;
  return Stac.p--;
}
если бы здесь был правильный код, то в стек нельзя бы было положить ноль
Согласен.
Просто не хотел усложнять код введением еще одной переменной для ошибки.
Так что мой код можно рассматривать, как набросок.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
01.11.2010, 17:47     Создать структуру, реализующую стек целых чисел типа LIFO #10
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;
}
KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
01.11.2010, 18:42     Создать структуру, реализующую стек целых чисел типа LIFO #11
Цитата Сообщение от 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;
}
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
01.11.2010, 19:01     Создать структуру, реализующую стек целых чисел типа LIFO #12
KpeHDeJIb, ага, типтого. Только у них в задании написано про работу с указателем на вершину стека. Мне кажется, это ключевой момент.
Balls
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 12
01.11.2010, 22:29  [ТС]     Создать структуру, реализующую стек целых чисел типа LIFO #13
Блин это ваще лаба по программированию) Я просто не шарю в С++ вобще)
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
01.11.2010, 22:48     Создать структуру, реализующую стек целых чисел типа LIFO #14
Balls, это ты к чему? Тебе уже дали кучу подсказок и даже несколько рабочих вариантов. Бери, разбирайся и начинай шарить .
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2010, 02:00     Создать структуру, реализующую стек целых чисел типа LIFO
Еще ссылки по теме:

C++ Создать стек из случайных целых чисел и отсортировать элементы по возрастанию (убыванию)
C++ Создать структуру, реализующую очередь целых чисел типа FIFO
Стек для хранения целых чисел (int) C++

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.11.2010, 02:00     Создать структуру, реализующую стек целых чисел типа LIFO #15
Цитата Сообщение от Day Посмотреть сообщение
Согласен.
Просто не хотел усложнять код введением еще одной переменной для ошибки.
Так что мой код можно рассматривать, как набросок.
если туда положить 1000 элементов, а в середине будет ноль
то при чтении стека, будет прочитано только полстека
Yandex
Объявления
02.11.2010, 02:00     Создать структуру, реализующую стек целых чисел типа LIFO
Ответ Создать тему
Опции темы

Текущее время: 13:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru