![]() |
![]() | #1 |
Banned Join Date: 10 2002 Location: Brooklyn, New York Age: 42
Posts: 3,760
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
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. |
![]() |
![]() | #2 |
Академик Join Date: 09 2001 Location: inside myself
Posts: 5,369
Downloads: 0 Uploads: 0
Reputation: 18 | 5 | ![]()
странно, что у тебя вообще что-то работает ![]() STACK *s1; STACK *s2; означает, что у тебя есть лишь указатели (а не реальные данные) - на что они указывают, DaNYer ? черт-те знает на что. ![]() STACK s1_data; STACK s2_data; STACK *s1 = &s1_data; STACK *s2 = &s2_data; вот тока после этого... |
![]() |
![]() | #4 | |
Академик Join Date: 09 2001 Location: inside myself
Posts: 5,369
Downloads: 0 Uploads: 0
Reputation: 18 | 5 | ![]() Quote:
![]() исходя из этого кода, я все-таки настаиваю на том, что указатели у тебя указывают на что угодно, но не на существующие структуры. Code: void main () { int test1, test2; STACK *s1; STACK *s2; init(s1); init(s2); ... я на твоем месте "new" бы делал ![]() или завел бы переменные типа STACK, а не STACK*. | |
![]() |
![]() | #5 |
Banned Join Date: 10 2002 Location: Brooklyn, New York Age: 42
Posts: 3,760
Downloads: 0 Uploads: 0
Reputation: 0 | 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..... |
![]() |
![]() | #6 | |
Академик Join Date: 09 2001 Location: inside myself
Posts: 5,369
Downloads: 0 Uploads: 0
Reputation: 18 | 5 | ![]()
Вот тебе работающий код: Quote:
| |
![]() |
![]() | #7 |
Грустно... Join Date: 08 2002 Location: Там, где всегда идут дожди Age: 38
Posts: 21,717
Downloads: 2 Uploads: 0
Reputation: 250 | 8 | ![]()
Гарик, ты тоже муру написал... s1 = new STACK; s2 = new STACK; ... delete s1; delete s2; //все, как у людей.... если же уже STACK s1; STACK s2; то создавать указатели излишне: push(&s1, 3); |
![]() |
![]() | #9 | |
Дошкольник Join Date: 07 2002 Location: South Park
Posts: 82
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]() Quote:
![]() На лицо... или на лице, конфликт цивилизаций: Евразия поясняет суть проблемы и дает множество (причем правильных) решений, а Америка все твердит - НЕТ, эта программа не работает. Остается одно, бомбить эту программу, что бы свергнуть ненавистный баг, который только она и видит! Хотя весь баг в том, что та же Америка подходит к решения своими методами (причем неверными в корне) и твердо стоит на своем ![]() Ну что же, удачи тебе, Америка, в твоем крестовом (на который положили крест) походе ![]() ![]() ![]() | |
![]() |
![]() | #10 | |
Академик Join Date: 09 2001 Location: inside myself
Posts: 5,369
Downloads: 0 Uploads: 0
Reputation: 18 | 5 | ![]() Quote:
2 Nemra: тебе бы в Политикс.. ![]() | |
![]() |
![]() | #12 |
Banned Join Date: 10 2002 Location: Brooklyn, New York Age: 42
Posts: 3,760
Downloads: 0 Uploads: 0
Reputation: 0 | 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 ![]() |
![]() |
![]() | #14 | |
Дошкольник Join Date: 07 2002 Location: South Park
Posts: 82
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]() Quote:
![]() Действительно, typedef struct stack STACK; не обьявляет переменные, а просто дает другое имя типу. И кстати, насколько я понимаю из стиля, программа писалась на С, так что использовать new и delete нельзя, народ (т.е. компилятор) нe поймет ![]() #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")) | |
![]() |
![]() | #15 |
Грустно... Join Date: 08 2002 Location: Там, где всегда идут дожди Age: 38
Posts: 21,717
Downloads: 2 Uploads: 0
Reputation: 250 | 8 | ![]()
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; } ![]() ![]() ![]() |
![]() |
Sponsored Links |