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

СТЕК. Запись последующего элемента. - C++

Восстановить пароль Регистрация
 
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
25.04.2011, 16:26     СТЕК. Запись последующего элемента. #1
Вводим стек (top), если элемент стека больше а, то этот элимент запишим в новый стек(top2)

Вродь пустяк, но не могу врубиться, первый элемен который >a записывает, а как взять "top2->next=" понять не могу(((

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
#include <conio.h>
#include <iostream.h>
 
struct node
{
 float num;
 node* next;
} ;
 
 
node* push(node* , float);
void printstack(node* );
node* pop(node*);
 
void main()
{  clrscr ();
   float what;
   int n,i,a;
   node* top=0;
   node* top2=0;
   cout<<"input n= ";
   cin>>n;
   cout<<endl;
   cout<<"input a= ";
   cin>>a;
   cout<<endl;
   //input in stek
   cout<<"input what"<< n<<"value\n";
   for (i=1;i<=n;i++)
   {
     cin>>what;
     top= push(top, what);
   }
 
     //print stek
  printstack(top);
  top2=new node;
 
 
 
   //output from stek
   while(top)
   {
     if (top->num >a)
    top2->num=top->num;
       // top2->next=
        top=pop(top);
   }
    printstack(top2);
   getch();
}
 
node* push(node* top, float what)
{
  node* pv=new node;
  pv->num=what;
  pv->next=top;
  return pv;
}
 
void printstack(node* top)
{
  float what;
 
  cout<<"stek:\n";
  while (top)
  {
    cout<<top->num<<" ";
    top=top->next;
  }
  cout<<endl;
 }
 
 node* pop(node* top)
 {
   node* pv=top->next;
   delete top;
   return pv;
 }
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
while(top)
   {
     if (top->num >a)
        top2->num=top->num;
       // top2->next=
        top=pop(top);
   }
Вот тут нужна помощь)

Добавлено через 1 час 47 минут
когда беру next->0 то выводит только один элемент >a((
C++
1
2
3
4
5
6
7
while(top)
   {
     if (top->num >a)
        top2->num=top->num;
       top2->next=0;
        top=pop(top);
   }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
26.04.2011, 18:10  [ТС]     СТЕК. Запись последующего элемента. #2
Что и примерно никто подсказать не может??? =((
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
26.04.2011, 18:12     СТЕК. Запись последующего элемента. #3
Цитата Сообщение от Owen04 Посмотреть сообщение
Что и примерно никто подсказать не может???
так ни черта же непонятно, что Вы хотите сделать.
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
26.04.2011, 19:05  [ТС]     СТЕК. Запись последующего элемента. #4
стек разбить на два стека!

в один числа больше "a", допустим 4, в другой остальные!

Добавлено через 4 минуты
Примерно так должно получиться:

введите n = 4;

введите а=4;

заполним стек
1 5 6 3
получаеться стек
3 6 5 1

в первый стек пойдёт 6 и 5
во второй 3 и 1.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
26.04.2011, 21: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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdio.h>
#include <stdlib.h>
 
/* STRUCT stack_node
 * node of stack includes value and 
 * address to previous node
*/
struct stack_node {
    int value;
    struct stack_node *prev;
};
 
struct stack_node * stack_node_new(struct stack_node * prev, int value) {
    struct stack_node *node = (struct stack_node *) malloc(sizeof(struct stack_node));
    node->value = value;
    node->prev = prev;
}
 
/* STRUCT stack
 * stack includes pointer to stack's top
*/
struct stack {
    struct stack_node *top;
};
 
size_t stack_size(struct stack *s) {
    size_t current_size = 0;
    struct stack_node * node;
 
    for (node = s->top; node != NULL; node = node->prev) {
        ++current_size;;
    }
 
    return current_size;
}
 
int stack_empty(struct stack *s) {
    return s->top == NULL;
}
 
void stack_push(struct stack *s, int value) {
    s->top = stack_node_new(s->top, value);
}
 
void stack_pop(struct stack *s) {
    struct stack_node * removed;
    if (!stack_empty(s)) {
        removed = s->top;
        s->top = s->top->prev;
    }
}
 
int stack_top(struct stack *s) {
    if (!stack_empty(s)) 
        return s->top->value;
    else
        return 0;
}
 
struct stack * stack_create() {
    struct stack * stack = (struct stack *)malloc(sizeof(struct stack));
    stack->top = NULL;
    return stack;
}
 
void stack_destroy(struct stack *s) {
    while (!stack_empty(s)) 
        stack_pop(s);
 
    free (s);
}
 
int main() {
    struct stack * s0 = stack_create();
    struct stack * s1 = stack_create();
    struct stack * s2 = stack_create();
    int i, a, n;
 
    printf("Введите a: ");
    scanf ("%d", &a);
 
    printf("Введите n: ");
    scanf ("%d", &n);
 
    while (n--) {
        printf("> ");
        scanf ("%d", &i);
 
        stack_push(s0, i);
    }
 
    while (!stack_empty(s0)) {
        if (stack_top(s0) > a)
            stack_push(s1, stack_top(s0));
        else
            stack_push(s2, stack_top(s0));
 
        stack_pop(s0);
    }
 
    while (!stack_empty(s1)) {
        printf ("%d ", stack_top(s1));
        stack_pop(s1);
    }
 
    printf ("\n");
 
    while (!stack_empty(s2)) {
        printf ("%d ", stack_top(s2));
        stack_pop(s2);
    }
 
    stack_destroy(s0);
    stack_destroy(s1);
    stack_destroy(s2);
 
    return 0;
}
Owen04
 Аватар для Owen04
5 / 5 / 3
Регистрация: 25.12.2009
Сообщений: 144
26.04.2011, 22:42  [ТС]     СТЕК. Запись последующего элемента. #6
спасиб) щас попробую)
Yandex
Объявления
26.04.2011, 22:42     СТЕК. Запись последующего элемента.
Ответ Создать тему
Опции темы

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