 |
[PLEASE HELP ASAP] Stacks |
 |
30.03.2003, 20:09
|
#1
|
Banned
Join Date: 10 2002
Location: Brooklyn, New York
Age: 47
Posts: 3,760
Rep Power: 0
|
[PLEASE HELP ASAP] Stacks
Pojaluista pomogite naiti problemmu, u menya uje ruki opuskaiutsya.....
esli est' dva stacka, mi delaem sleduiushee:
push(s1, 2);
push(s1, 3);
push(s2, 4);
push(s2, 5);
to po idee esli sdelat' posle etogo vot tak:
test1=pop(s1); //doljno bit' 3
test2=pop(s2); //doljno bit' 5
printf("TEST1 = %d\n", test1);
printf("TEST2 = %d\n", test2);
to na ekran doljno viprintat'sya sleduyuhsee:
TEST1 = 3
TEST2 = 5
a vmesto etogo u menya poluchaetsya
TEST1 = 5
TEST2 = 4
kak mne etu dolbannomu algoritmu obyasnit' chto u menya DVA stacka a ne ODIN?????????
privoju svoi kod:
Code:
//header file
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 100
#define BOTTOM -1
#define TRUE 1
#define FALSE 0
struct stack
{
int top;
int elements[STACKSIZE];
};
typedef struct stack STACK;
a vot i main
Code:
#include "stacks.h"
// basic operation function prototypes
void init(STACK *);
int empty(STACK *);
int pop(STACK *);
void push(STACK *, int);
void main ()
{
int test1, test2;
STACK *s1;
STACK *s2;
init(s1);
init(s2);
push(s1, 2);
push(s1, 3);
push(s2, 4);
push(s2, 5);
test1=pop(s1); //doljno bit' 3
test2=pop(s2); //doljno bit' 5
printf("TEST1 = %d\n", test1);
printf("TEST2 = %d\n", test2);
}
//** stack basic operation functions go here:
//** initstack
void init(STACK *s)
{
s->top = BOTTOM;
}
//empty **************
int empty(STACK *s)
{
if(s->top == BOTTOM)
return (TRUE);
else
return (FALSE);
}
//******* pop
int pop(STACK *s)
{
if(empty(s))
{
printf("%s","stack underflow");
exit(1);
}
return(s->elements[s->top--]);
}
//******* push
void push(STACK *s, int x)
{
if(s->top == STACKSIZE-1)
{
printf("%s","stack overflow");
exit(1);
}
else
{
s->elements[++(s->top)] = x;
return;
}
}
Last edited by DaNYer; 30.03.2003 at 22:20.
|
|
|
 |
31.03.2003, 04:47
|
#2
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
странно, что у тебя вообще что-то работает
STACK *s1;
STACK *s2;
означает, что у тебя есть лишь указатели (а не реальные данные) - на что они указывают, DaNYer ?
черт-те знает на что.
STACK s1_data;
STACK s2_data;
STACK *s1 = &s1_data;
STACK *s2 = &s2_data;
вот тока после этого...
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
|
|
|
31.03.2003, 05:53
|
#3
|
Banned
Join Date: 10 2002
Location: Brooklyn, New York
Age: 47
Posts: 3,760
Rep Power: 0
|
Gar jan, privet
oni ukazivaiut na structure - stack
....
ya spat' poidu, pozdno ujo...
do zavtra
|
|
|
31.03.2003, 06:52
|
#4
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
Quote:
Originally posted by DaNYer
Gar jan, privet
oni ukazivaiut na structure - stack
....
ya spat' poidu, pozdno ujo...
do zavtra
|
привет-привет 
исходя из этого кода, я все-таки настаиваю на том, что указатели у тебя указывают на что угодно, но не на существующие структуры.
Code:
void main ()
{
int test1, test2;
STACK *s1;
STACK *s2;
init(s1);
init(s2);
...
я на твоем месте "new" бы делал 
или завел бы переменные типа STACK, а не STACK*.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
|
|
|
01.04.2003, 05:10
|
#5
|
Banned
Join Date: 10 2002
Location: Brooklyn, New York
Age: 47
Posts: 3,760
Rep Power: 0
|
gar obrati vnimanie na header file i na typedef...... na nee i ukazivaet... xotya ya mojet i oshibaius''
esli ne trudno mojesh ti ili kto nibud' eshe napisat' mne RABOTAYUSHYUIU versiyu etoi demki s DVUMYA NEZAVISIMIMI STACKAMI????
spasibo zaranee.....
|
|
|
01.04.2003, 06:45
|
#6
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
Вот тебе работающий код:
Quote:
Originally posted by Greco
странно, что у тебя вообще что-то работает 
STACK *s1;
STACK *s2;
означает, что у тебя есть лишь указатели (а не реальные данные) - на что они указывают, DaNYer ?
черт-те знает на что.

STACK s1_data;
STACK s2_data;
STACK *s1 = &s1_data;
STACK *s2 = &s2_data;
вот тока после этого...
|
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
|
|
|
01.04.2003, 07:45
|
#7
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
Гарик, ты тоже муру написал...
s1 = new STACK;
s2 = new STACK;
...
delete s1;
delete s2;
//все, как у людей.... если же уже
STACK s1;
STACK s2;
то создавать указатели излишне:
push(&s1, 3);
|
|
|
01.04.2003, 14:21
|
#8
|
Banned
Join Date: 10 2002
Location: Brooklyn, New York
Age: 47
Posts: 3,760
Rep Power: 0
|
rebyataaaaaaaaaaaaaaa spasibo konechno, no vse ravno programma vidit toka odin stack a ne dva......
|
|
|
01.04.2003, 21:34
|
#9
|
Дошкольник
Join Date: 07 2002
Location: South Park
Posts: 82
Rep Power: 0
|
Quote:
Originally posted by DaNYer
rebyataaaaaaaaaaaaaaa spasibo konechno, no vse ravno programma vidit toka odin stack a ne dva......
|
Извините за цинизм, не удержался...
На лицо... или на лице, конфликт цивилизаций: Евразия поясняет суть проблемы и дает множество (причем правильных) решений, а Америка все твердит - НЕТ, эта программа не работает. Остается одно, бомбить эту программу, что бы свергнуть ненавистный баг, который только она и видит! Хотя весь баг в том, что та же Америка подходит к решения своими методами (причем неверными в корне) и твердо стоит на своем 
Ну что же, удачи тебе, Америка, в твоем крестовом (на который положили крест) походе
__________________
std::for_each( users.begin(), users.end(), std::bind2nd( std::mem_fun(&ForumMember::sendMessage), "Hello"))
|
|
|
02.04.2003, 05:21
|
#10
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
Quote:
Originally posted by DaNYer
rebyataaaaaaaaaaaaaaa spasibo konechno, no vse ravno programma vidit toka odin stack a ne dva......
|
извини, тогда я просто умываю руки.
2 Nemra: тебе бы в Политикс..
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
|
|
|
02.04.2003, 13:56
|
#11
|
Banned
Join Date: 10 2002
Location: Brooklyn, New York
Age: 47
Posts: 3,760
Rep Power: 0
|
&
|
|
|
02.04.2003, 13:59
|
#12
|
Banned
Join Date: 10 2002
Location: Brooklyn, New York
Age: 47
Posts: 3,760
Rep Power: 0
|
vot i vsya problema...
spasibo rebyata
razbombil konechno i nashel
(razumeetsya ya ispol'zoval bombi i krilatie raketi VISOKOI TOCHNOSTI)
Vit', ukazateli vse taki nujni...
sorry chto usomnilsya
Nemra, tebe slovo
|
|
|
02.04.2003, 14:15
|
#13
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
По-моему не надо... пришли мне на майл верию с указателями я ее переделаю так, что будет пахать без них!
|
|
|
 |
|
 |
02.04.2003, 15:07
|
#14
|
Дошкольник
Join Date: 07 2002
Location: South Park
Posts: 82
Rep Power: 0
|
Какое слово? предыдущий reply был "&". Если это означает, что ты взял обьекты типа STACK, а не указатели, то все работает и проблем нету. Что же мне еще сказать??? не часто я сюда захожу поэтому попробую хоть что-то ответить  ... до следующего раза.
Действительно, typedef struct stack STACK; не обьявляет переменные, а просто дает другое имя типу. И кстати, насколько я понимаю из стиля, программа писалась на С, так что использовать new и delete нельзя, народ (т.е. компилятор) нe поймет  Можно использовать malloc и free. Если же можно на C++, то практичнее написать класс, а рекоммендуется все-таки пользоваться стандартом... например:
#include <stack>
#include <iostream>
typedef std::stack<int> STACK;
int main()
{
STACK s1, s2;
s1.push(2);
s1.push(3);
s2.push(4);
s2.push(5);
std::cout << "TEST1 = " << s1.top() << std::endl;
std::cout << "TEST2 = " << s2.top() << std::endl;
return 0;
}
__________________
std::for_each( users.begin(), users.end(), std::bind2nd( std::mem_fun(&ForumMember::sendMessage), "Hello"))
|
|
|
 |
02.04.2003, 15:18
|
#15
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
std::stack и std::queue ведь не являются на самом деле классами, они просто обертки вокруг std::deque, или чего-нить еще если вставить второй template параметер.
Так что можно еще проще
Code:
#include <deque>
#include <iostream>
typedef std::deque<int> STACK;
int main()
{
STACK s1;
STACK s2;
s1.push_back(1);
s2.push_back(2);
std::cout << s1.back() << std::endl;
std::cout << s2.beck << std::endl;
return 0;
}
Вот
|
|
|
All times are GMT. The time now is 19:45. |
|
|