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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.65
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
#1

Стек - C++

26.02.2011, 18:39. Просмотров 4332. Ответов 7
Метки нет (Все метки)

Здравствуйте. У меня такая проблема: Разработать функцию, которая по одному стеку строит два новых: Stack1 из положительных элементов и Stack2. Не мог бы хоть кто, объяснить, как вводить эл-ты в стек, и дать хоть небольшую подсказку по заданию..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2011, 18:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стек (C++):

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

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

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

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

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

Стек - C++
Здравствуйте,помогите найти понятную реализую кода стека с объяснениями.заранее благодарю Добавлено через 27 секунд Не STL

7
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
26.02.2011, 18:51 #2
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>
#include <stack>
#include <cstdlib>
#include <ctime>
 
void func(std::stack<int> stc1, std::stack<int> &stc2, std::stack<int> &stc3){
  while(!stc1.empty()){
    if(stc1.top() > 0){
      stc2.push(stc1.top());
      stc3.push(stc1.top());
    }
    stc1.pop();
  }
}
 
int main(){
  std::stack<int> stc1, stc2, stc3;
  srand(time(0));
  for(int i = 0; i < 10; ++i)
    stc1.push(rand() % 100 - 50);
  func(stc1, stc2, stc3);
  std::cout << "\n\n1-> ";
  while(!stc1.empty()){
    std::cout << stc1.top() << ' ';
    stc1.pop();
  }
  std::cout << "\n\t2-> ";
  while(!stc2.empty()){
    std::cout << stc2.top() << ' ';
    stc2.pop();
  }
  std::cout << "\n\t3-> ";
  while(!stc3.empty()){
    std::cout << stc3.top() << ' ';
    stc3.pop();
  }
  return 0;
}
0
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
26.02.2011, 19:05  [ТС] #3
Не понял.

Добавлено через 10 минут
Ой, извиняюсь, это решение что-ли? =\
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
26.02.2011, 19:10 #4
Цитата Сообщение от Sick2 Посмотреть сообщение
Ой, извиняюсь, это решение что-ли? =\
Да, средствами STL.
0
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
26.02.2011, 20:29  [ТС] #5
Спасибо, но мне удаление и добавление эл-тов желательно через ф-ции отдельные сделать:
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
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
 
int *Stack, max,*Stackan,maxx;
 
void push(int x);
int pop(void);
 
void main(void)
{
        int iEl;
        
        printf("Vvedite razmer stecka\n");
        scanf("%d",&max);
        Stack = new int [max];
 
        for (int i = 0; i < max; i++)
                Stack[i] = 0;
        
        printf("Vvedite elemeti\n");
 
        for (int i = 0; i < 4; i++)
        {
                scanf("%d",&iEl);
                if(iEl > 0)
                {
                    Stackan = new int [maxx];
                    for( int j=0;j<maxx;j++)
                        Stackan[j]=0;
                        push(iEl);}
        }
 
        printf("\nSteck:\n");
        
        for (int i = 0; i < 4; i++)
        {
                iEl = pop();
                printf("\n%d ", iEl);
        }
 
        getch();
}
 
void push(int x)
{
        for (int i = max-1; i > 0; i--)
                Stack[i] = Stack[i-1];
 
        Stack[0] = x;
}
 
int pop(void)
{
        int res = Stack[0];
 
        for (int i = 0; i < max - 1; i++)
        {
                Stack[i] = Stack[i+1];
                Stack[i+1] = 0;
        }
 
        return res;
}
что-то пытался, что смотрел из других примеров, посмотрите, что не так.

Добавлено через 1 час 7 минут
кто-нибудь помогите
0
SS_47
21 / 21 / 1
Регистрация: 12.07.2010
Сообщений: 27
26.02.2011, 20:48 #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
40
41
42
43
44
45
46
47
48
#include <iostream>
 
using namespace std;
 
struct node
{
  int data; //данные
  node *next; //указатель на следующий элемент
};
 
class stack
{
private:
  node *top; //вершина стека
public:
  stack(): top(NULL){}
  ~stack();
  int pop(void); //взять из стекаа
  void push(int); //поместить в стек
};
 
  stack::~stack()
  {
   node *temp=NULL;
   while(top)
     {
      temp=top;
      top=top->next;
      delete temp;
     }
  }
 
  int stack::pop(void)
  {
    int out_numb=top->data;
    node *temp=top;
    top=top->next;
    delete temp;
    return (out_numb);
  }
 
  void stack::push(int number)
  {
    node *temp=new node;
    temp->data=number;
    temp->next=top;
    top=temp;
  }
0
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
27.02.2011, 15:27  [ТС] #7
Через классы мне нельзя пока.Не прошли ещё, так у меня код не верный?

Добавлено через 4 часа 17 минут
ап, посмотрите кто код, что я выложил...
0
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
05.03.2011, 21:26  [ТС] #8
Народ, помогите, умоляю. Всё мучаюсь с заданием.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cout<<"vvedite razmer stecka"<<endl;
    cin>>n;
    cout<<"vvedite elementi"<<endl;
    for (int i=0; i<n; i++) 
    {
        cin>>q; st1.Push(q);
 
        if(q>0) st2.Push(q);
        else st3.Push(q);
    } 
     cout << "stack ";
  while(!st2.isEmpty()){
   cout << st2.Top << ' ';
    st2.Pop();
  }
Почему при выводе элементов стека, у меня выводятся адреса, а не сами элементы?
Я думаю это из-за Top, но не могу исправить...
В общем вылаживаю весь код.
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
// Stack.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "stdafx.h"
#include "stack.h"
bool Stack::isEmpty()
{
    return ((*Top).prev==NULL);
}
 
int Stack::Pop()
{
    int vp=STACK_ESE;
    if (!isEmpty()) 
    {
        vp=(*Top).key;
        Node* pr=(*Top).prev;
        delete Top;
        Top=pr;
    }
    return vp;
}
void Stack::Push(int x)
{
    Node *nd = new Node;
    nd->key=x;
    nd->prev=Top;
    Top=nd;
}
Stack CreateStack()
{
    Stack *st=new Stack;
    st->Top=NULL;
    st->Push(STACK_ESE);
    return *st;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define STACK_ESE    -1 
 
 
    struct Node
    {
    int    key;
    Node* prev;
    };
struct Stack                      
{
    Node*  Top;
      
    void Push(int);         
    int  Pop();  
    bool isEmpty(); 
};
Stack CreateStack()
;
Помогите!

Добавлено через 1 час 25 минут
АП!!!

Добавлено через 1 час 4 минуты
Проблема решена. Тему клоуз.
0
05.03.2011, 21:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2011, 21:26
Привет! Вот еще темы с ответами:

Стек - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Stack_mass { public: int *data; int max_count,...

Стек - C++
Уважаемые теоретики по С++ подскажите, пожалуйста, как граммотно называются в Стеке самое нижнее и самое верхнее значения. Заранее спасибо.

Стек! - C++
Реализуйте структуру данных &quot;стек&quot;. Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные...

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


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

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

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