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

Стек в два стека - C++

Восстановить пароль Регистрация
 
Igor92
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 7
10.07.2012, 17:16     Стек в два стека #1
Здравствуйте!!
Нужно создать стек в диапазоне -50 до 50.Преобразовать стек в два стека.Причем, первый должен содержать только чётные числа,второй - только нечётные.
Ни разу не работала со стеками,помогите пожалуйста разобраться.

Добавлено через 1 минуту
Цитата Сообщение от Igor92 Посмотреть сообщение
Здравствуйте!!
Нужно создать стек в диапазоне -50 до 50.Преобразовать стек в два стека.Причем, первый должен содержать только чётные числа,второй - только нечётные.
Ни разу не работала со стеками,помогите пожалуйста разобраться.
Вот код для того же условия только сдесь выводится положительные и отрицательные:
Что тут нада поменять чтобы выводило чётные и нечётные)))))
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* Макрос возвращает случайное число х такое, что l <= x <= h */
#define bounded_random(l, h) ( rand() % ((h) - (l) + 1) + (l) )

/* Структура, состаящая из целого значения и указателя на такую же структуру */
typedef struct NODE {
int value;
struct NODE * next;
} node_t;

/* Функция добавляет значение в начало списка
pStack - указатель на указатель на начало списка
nValue - добавляемое значение
возвращает 0 при удачном завершении, -1 при ошибке выделения памяти
*/
int push(node_t ** pStack, const int nValue) {
node_t * pNode = malloc(sizeof(node_t));
if ( ! pNode )
return -1;

pNode->value = nValue;
pNode->next = *pStack;
*pStack = pNode;

return 0;
}

/* Функция присваивает переменной, на которую указывает pValue
значение первого элемента списка и удаляет этот элемент
возвращает 0 при удачном завершении, -1 если список пуст
*/
int pop(node_t ** pStack, int * pValue) {
if ( ! *pStack )
return -1;
else {
node_t * pNode = (*pStack)->next;
*pValue = (*pStack)->value;
free(*pStack);
*pStack = pNode;
}

return 0;
}

/* Нижняя и верхняя границы диапазона случайных чисел */
#define LOW (-50)
#define HIGH (50)

int main(void) {
size_t count;

srand(time(NULL));

/* В цикле запрашивает количество элементов, выход - ввод символа, отличного от цифры или 0 */
while ( printf("Number of elements: ") && scanf("%u", &count) == 1 && count ) {
/* all - указатель на стек для всех чисел, pos - позитивных, neg - негативных */
node_t * all, * pos, * neg;
int curr;

all = pos = neg = NULL;
/* Запись в общий стек заданного количества элементов */
while ( count-- ) {
if ( push(&all, bounded_random(LOW, HIGH)) ) {
fprintf(stderr, "Memory error!\n");
exit(1);
}
}

printf("All:\n");
/* Пока из общего стека удаётся получить значение, вывод значения на экран
и размещение в один из стеков pos/neg в зависимости от того, позитивное оно,
или негативное */
while ( ! pop(&all, &curr) ) {
printf("%d ", curr);
if ( curr < 0 ) {
if ( push(&neg, curr) ) {
fprintf(stderr, "Memory error!\n");
exit(1);
}
}
else {
if ( push(&pos, curr) ) {
fprintf(stderr, "Memory error!\n");
exit(1);
}
}
}

/* вывод значений по очереди из стеков pos и neg */
printf("\nPositive:\n");
while ( ! pop(&pos, &curr) )
printf("%d ", curr);

printf("\nNegative:\n");
while ( ! pop(&neg, &curr) )
printf("%d ", curr);

printf("\n");
/* Память из-под стеков освобождать не приходится - это уже функция pop в цикле сделала */
}

exit(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2012, 17:16     Стек в два стека
Посмотрите здесь:

Используя стек вывести числа введенные пользователем в обратном порядке элемент стека – число C++
C++ Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ.
C++ Задача на стек (сформировать 2 стека из положительных и отрицательных)
Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) C++
Сформировать стек по файлу чисел. Удалить из стека узлы с минимальным значением информационного поля C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
10.07.2012, 17:47     Стек в два стека #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
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <stack>
 
using namespace std;
 
int main() {
    unsigned i, count;
    cout << "Count of elements: ";
    cin >> count;
    srand((int)time(0));
    stack<signed char> s1;
    for (i = 0; i < count; i++)
        s1.push(rand() % 101 - 50);
    stack<signed char> s2, s3;
    signed char c;
    while (!s1.empty()) {
        cout << int(c = s1.top()) << endl;
        (c & 1? s3: s2).push(c);
        s1.pop();
    }
    cout << endl;
    while (!s2.empty()) {
        cout << int(s2.top()) << endl;
        s2.pop();
    }
    cout << endl;
    while (!s3.empty()) {
        cout << int(s3.top()) << endl;
        s3.pop();
    }
}
Ksan
10.07.2012, 18:02
  #3

Не по теме:

Цитата Сообщение от Igor92 Посмотреть сообщение
Ни разу не работалА со стеками
Палишсо

Igor92
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 7
10.07.2012, 18:08  [ТС]     Стек в два стека #4
Привет.Извини за орфографию

а ты можешь на чистом Си это написать а то я счас на уроке выручай!!!!
ПЖЛСТ
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
10.07.2012, 18:24     Стек в два стека #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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "iostream.h"
#include "math.h"
 
class Stack
{
private:
int *Arr;
int Size;
int ptr;
public:
Stack()
{
  Size=100;
  Arr=new int [Size];
  ptr=-1;
}
Stack(int sz)
{
  Size=sz;
  Arr=new int [Size];
  ptr=-1;
}
~Stack()
{
  delete [] Arr;
}
void push(int n)
{
  Arr[++ptr]=n;
}
int pop()
{
  return Arr[ptr--];
}
int isEmpty()
{
  return (ptr >= 0) ? 0 : 1;
}
void print()
{
  int i;
  for (i=0; i < ptr; i++) cout << Arr[i] << " ";
  cout << endl;
}
};
 
int main(int argc, char* argv[])
{
 
    Stack Common(100);
    Stack Odd(100);
    Stack Even(100);
 
    int Num[]={12,46,-7,50,20,31,47,-29,-34};
    int sn=sizeof(Num)/sizeof(int);
    int i,k;
 
   // Г‡Г*ГЈГ®Г*ГїГҐГ¬ Гў îáùèé Г±ГІГҐГЄ...
 
   for (i=0; i < sn; i++)
        Common.push(Num[i]);
 
   // ГђГ*çáðГ*ñûâГ*ГҐГ¬ Г·ГҐГІГ*ûå ГЁ Г*ГҐГ·ГҐГІГ*ûå
 
   while (1) 
   {
        if (Common.isEmpty()) break;
        k=Common.pop();
        if ((abs(k) % 2) == 1) 
       Odd.push(k);
    else
       Even.push(k);
   }
 
   // ГЏГҐГ·Г*ГІГ*ГҐГ¬ ðåçóëüòГ*ГІ:
 
   Odd.print();
    
   cout << endl;
 
   Even.print();
    
   cout << endl;
 
   return 0;
}
Yandex
Объявления
10.07.2012, 18:24     Стек в два стека
Ответ Создать тему
Опции темы

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