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

Стек - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.65
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
26.02.2011, 18:39     Стек #1
Здравствуйте. У меня такая проблема: Разработать функцию, которая по одному стеку строит два новых: Stack1 из положительных элементов и Stack2. Не мог бы хоть кто, объяснить, как вводить эл-ты в стек, и дать хоть небольшую подсказку по заданию..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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;
}
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
26.02.2011, 19:05  [ТС]     Стек #3
Не понял.

Добавлено через 10 минут
Ой, извиняюсь, это решение что-ли? =\
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
26.02.2011, 19:10     Стек #4
Цитата Сообщение от Sick2 Посмотреть сообщение
Ой, извиняюсь, это решение что-ли? =\
Да, средствами STL.
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 минут
кто-нибудь помогите
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;
  }
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
27.02.2011, 15:27  [ТС]     Стек #7
Через классы мне нельзя пока.Не прошли ещё, так у меня код не верный?

Добавлено через 4 часа 17 минут
ап, посмотрите кто код, что я выложил...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2011, 21:26     Стек
Еще ссылки по теме:

C++ Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) C++
Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? C++

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

Или воспользуйтесь поиском по форуму:
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 минуты
Проблема решена. Тему клоуз.
Yandex
Объявления
05.03.2011, 21:26     Стек
Ответ Создать тему
Опции темы

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