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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
ugodaj
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 42
#1

стек в ручную - C++

28.11.2012, 17:14. Просмотров 1238. Ответов 17

Помогите создать стек в ручную чтобы работали функции добавление элемента и удаление! ( желательно стек из 4 элементов итегер, и цифры в них от 0 до 50 )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 17:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос стек в ручную (C++):

Используя стек, описать функцию проверяющую, является ли стек пустым - C++
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include <iostream> #include <stdlib.h> ...

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

Правильно ли составила программку?Проверяю в ручную решение - не сходится( - C++
Тема контрольной - функции теории множеств(дискретка), но писать тему видимо нужно сюда - потому что я в коде неуверена правильно...

Почему не правильно работает? Даже в ручную все просчитала, не выходит! - C++
Вот такая маленькая программа. Вводится массив символов, нужно записать в отдельный массив числа из этой строки. То есть на входе имеем...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

17
mmd
13 / 13 / 1
Регистрация: 17.05.2012
Сообщений: 80
28.11.2012, 17:22 #2
в STL все есть
0
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
28.11.2012, 17:37 #3
вот пример класса реализующий стек. Надеюсь вам поможет.

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
#include <iostream>
using namespace std;
////////////////////////////
class Stack
{
 private:
  enum { MAX = 4 };
  int st [ MAX ];
  int top;
 
 public:
  Stack ( ):
 { top = 0; }
  
  void push ( int var ) // поместить в стек
   { st [ ++top ] = var; }
  
  int pop ( ) //взять из стека
   { return st [ top--]; }
};
/////////////////////////////////////
 int main()
 {
   Stack s1;
   s1.push ( 10 );
   s1.push ( 15 );
   s1.push ( 20 );
   s1.push ( 23 );
   s1.push ( 49 );
   
   cout << " 1: " << s1.pop( ) << endl;
   cout << " 2: " << s1.pop( ) << endl; 
   cout << " 3: " << s1.pop( ) << endl;
   cout << " 4: " << s1.pop( ) << endl;
   cout << " 5: " << s1.pop( ) << endl;
   system("PAUSE");
   return 0;
 }
1
ugodaj
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 42
29.11.2012, 11:29  [ТС] #4
Цитата Сообщение от mmd Посмотреть сообщение
в STL все есть
А мне кок раз надо реализовать стек не используя STL!

Добавлено через 1 минуту
Цитата Сообщение от fuzzytoozy Посмотреть сообщение
вот пример класса реализующий стек. Надеюсь вам поможет.

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
#include <iostream>
using namespace std;
////////////////////////////
class Stack
{
 private:
  enum { MAX = 4 };
  int st [ MAX ];
  int top;
 
 public:
  Stack ( ):      <<<<------- где то тут ругается!
 { top = 0; }
  
  void push ( int var ) // поместить в стек
   { st [ ++top ] = var; }
  
  int pop ( ) //взять из стека
   { return st [ top--]; }
};
/////////////////////////////////////
 int main()
 {
   Stack s1;
   s1.push ( 10 );
   s1.push ( 15 );
   s1.push ( 20 );
   s1.push ( 23 );
   s1.push ( 49 );
   
   cout << " 1: " << s1.pop( ) << endl;
   cout << " 2: " << s1.pop( ) << endl; 
   cout << " 3: " << s1.pop( ) << endl;
   cout << " 4: " << s1.pop( ) << endl;
   cout << " 5: " << s1.pop( ) << endl;
   system("PAUSE");
   return 0;
 }
Хороший код только в чём то ошибка
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
29.11.2012, 11:44 #5
Двоеточие уберите.
вот результат работы кода:
1
Миниатюры
стек в ручную  
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
30.11.2012, 18:22 #6
извиняюсь, вот рабочий. Сам проверял. =)
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
#include <iostream>
using namespace std;
////////////////////////////
class Stack
{
 private:
  enum { MAX = 5 };
  int st [ MAX ];
  int top;
 
 public:
  Stack ( ): top(0)
 {  }
 
  void push ( int var )
   {
   st [ ++top ] = var;
    }
 
  int pop ( )
   {
   return st [ top-- ]; }
};
/////////////////////////////////////
 int main()
 {
   Stack s1;
   s1.push ( 10 );
   s1.push ( 15 );
   s1.push ( 20 );
   s1.push ( 9 );
 
   cout << " 1: " << s1.pop( ) << endl;
   cout << " 2: " << s1.pop( ) << endl;
   cout << " 3: " << s1.pop( ) << endl;
   cout << " 4: " << s1.pop( ) << endl;
   system("PAUSE");
   return 0;
 }
1
ugodaj
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 42
04.12.2012, 11:44  [ТС] #7
Спасибо всё работает отлично! А можете сказать что означает строка в классе enum { MAX = 5 }; ?
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
04.12.2012, 11:54 #8
Цитата Сообщение от ugodaj Посмотреть сообщение
А можете сказать что означает строка в классе enum { MAX = 5 }; ?
http://www.cyberguru.ru/cpp/cpp-lang...p2-page26.html
1
ugodaj
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 42
06.12.2012, 13:26  [ТС] #9
Слушайте мне как бы надо было ещё чтоб были функции добавления и удаления я нашёл вот такой отличный код, но вот незадача выдаёт ошибку, чего куда добавить или где изменить?
1 C:\Dev-Cpp\include\c++\3.4.2\backward\iostream.h:31, from C:\Documents and Settings\DmitrijsSav\Desktop\stek31.cpp In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31, from C:\Documents and Settings\DmitrijsSav\Desktop\stek31.cpp
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
40 C:\Documents and Settings\DmitrijsSav\Desktop\stek31.cpp `main' must return `int'
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
#include <iostream.h>
 
/*НАША СТРУКТУРА*/
struct List
{
    int x; //информационный элемент
    List *Next,*Head; //Голова стека и указатель на следующий элемент
};
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК  (в список LIFO)*/
void Add(int x, List **MyList) //Принимаем элемент и указатель на указатель на стек
{
    List *temp=new List; //Выделяем память для нового элемента
    temp->x=x; //Записываем в поле x принимаемый в функцию элемент x
    temp->Next=(*MyList)->Head; //Указываем, что следующий элемент это предыдущий
    (*MyList)->Head=temp; //Сдвигаем голову на позицию вперед
}
 
/*ФУНКЦИЯ ОТОБРАЖЕНИЯ СТЕКА*/
void Show(List *MyList) //Нужен только сам стек
{
    List *temp=new List; //Выделяем память под временный элемент
    temp=MyList->Head; //Указываем ему, что его позиция в голове стека
               //с помощью цикла проходим по всему стеку
    while (temp!=NULL)  //выходим при встрече с пустым полем
    {
        cout<<temp->x<<" "; //Выводим на экран элемент стека
        temp=temp->Next; //Переходим к следующему элементу
    }
}
 
/*ФУНКЦИЯ УДАЛЕНИЯ СТЕКА ИЗ ПАМЯТИ*/
void ClearList(List *MyList)
{   
     while (MyList->Head!=NULL)  //Пока по адресу не пусто
     {   
        List *temp=MyList->Head->Next; //Временная переменная для хранения адреса следующего элемента
        delete MyList->Head; //Освобождаем адрес обозначающий начало
        MyList->Head=temp; //Меняем адрес на следующий
     }
}
 
void main()
{
    List *MyList=new List; //Выделяем память для стека
    MyList->Head=NULL; //Во избежание ошибок инициализируем первый элемент
 
    for (int i=0;i<10;i++) Add(i,&MyList); //Заносим данные в стек
    Show(MyList); //Выводим стек на экран
 
void ClearList(List *MyList); //Очищаем память.
   
}
0
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
06.12.2012, 14:42 #10
А можете сказать что означает строка в классе enum { MAX = 5 }; ?
данная строка позволяет инициализировать переменную в классе константным значением. Объявление const int = 5 не возможно сделать в классе, поэтому используется тип перечисления для определения переменной. Сделано это для того, чтобы не использовать глобальной переменной
0
ugodaj
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 42
08.01.2013, 11:24  [ТС] #11
Никто не может помочь в чём ошибка?
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
08.01.2013, 11:43 #12
У меня есть реализация стека на псевдокоде, думаю не трудно будет перевести на c + +

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
function MAKENULL (STACK S)
      S.top = maxlenght+1
 
function EMPTY (STACK S) {
      if S.top > maxlenght
      then return true
      else return false
 
function TOP (STACK S)
      if EMPTY(S)
then error (“стек порожній”)
      else return S.elementtype[S.top]
}
 
function POP (STACK S)
      if EMPTY(S)
then error (“стек порожній”)
      else S.top = S.top + 1
}
 
function PUSH (elementtype x, STACK S)
      if S.top == 1
then error (“Стек повний”)
      else
            S.top = S.top1;
            S.elements[S.top] = x;
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
08.01.2013, 11:43 #13
Цитата Сообщение от ugodaj Посмотреть сообщение
40 C:\Documents and Settings\DmitrijsSav\Desktop\stek31.cpp `main' must return `int'
C++
1
int main()//а не void main()
Остальное варнинги. Вам сообщают, что фаил iostream.h устарел
0
ugodaj
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 42
08.01.2013, 12:12  [ТС] #14
спасибо

Добавлено через 4 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
int main()//а не void main()
Остальное варнинги. Вам сообщают, что фаил iostream.h устарел
Если я меняю на int main() то выдаёт такие ошибки:
1 C:\Dev-Cpp\include\c++\3.4.2\backward\iostream.h:31, from C:\Documents and Settings\DmitrijsSav\Desktop\nerabo4ij stek.cpp In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31, from C:\Documents and Settings\DmitrijsSav\Desktop\nerabo4ij stek.cpp
1 C:\Documents and Settings\DmitrijsSav\Desktop\nerabo4ij stek.cpp from C:\Documents and Settings\DmitrijsSav\Desktop\nerabo4ij stek.cpp
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
08.01.2013, 12:17 #15
C++
1
2
#include <iostream>
using namespace std;
можно
C++
1
#include <iostream>
и при обращении к данным из пространства std, обращаться к данному пространству имен:
C++
1
std::cout<<"ffffffffffffff";
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2013, 12:17
Привет! Вот еще темы с ответами:

&,|, ^, приведите пример на каждую операцию бе компелятора а в ручную , для объяснения работы этих операций - C++
#include &lt;iostream&gt; int main() { char op = 0; std::cin &gt;&gt; op; int a = 220; int b =...

Заменить функцию tolower на ручную функцию - C++
В общем проблема такова. Tolower работает только с англ.яз вводимых данных. А мне нужно что бы работало на рус. Какой ручной функцией...

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) - C++
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Стек - C++
помогите реализовать стек через структуру.....тоесть мне надо забить данные и вывести их читал в книгах понял мало #include...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
08.01.2013, 12:17
Ответ Создать тему
Опции темы

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