![]() | |
| |||||||
| Home | Register | Blogs | FAQ | Members List | Calendar | Downloads | Arcade | Mark Forums Read |
| Algorithms The source of algorithms for your project |
![]() |
| | LinkBack | Thread Tools | Display Modes |
| | #1 |
| Banned Join Date: Oct 2002 Location: Brooklyn, New York
Posts: 3,760
Rep Power: 0 Reputation:
10 | 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 : Mar 30, 2003 at 22:20. |
| | |
| | #2 |
| Administrator | странно, что у тебя вообще что-то работает ![]() STACK *s1; STACK *s2; означает, что у тебя есть лишь указатели (а не реальные данные) - на что они указывают, DaNYer ? черт-те знает на что. ![]() STACK s1_data; STACK s2_data; STACK *s1 = &s1_data; STACK *s2 = &s2_data; вот тока после этого...
__________________ И повешенные могут качаться в неположенную сторону. /С.Е.Лец/ |
| | |
| | #4 | |
| Administrator | Quote:
![]() исходя из этого кода, я все-таки настаиваю на том, что указатели у тебя указывают на что угодно, но не на существующие структуры. Code: void main ()
{
int test1, test2;
STACK *s1;
STACK *s2;
init(s1);
init(s2);
... я на твоем месте "new" бы делал ![]() или завел бы переменные типа STACK, а не STACK*.
__________________ И повешенные могут качаться в неположенную сторону. /С.Е.Лец/ | |
| | |
| | #5 |
| Banned Join Date: Oct 2002 Location: Brooklyn, New York
Posts: 3,760
Rep Power: 0 Reputation:
10 | 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 | |
| Administrator | Вот тебе работающий код: Quote:
__________________ И повешенные могут качаться в неположенную сторону. /С.Е.Лец/ | |
| | |
| | #7 |
| Грустно... | Гарик, ты тоже муру написал... s1 = new STACK; s2 = new STACK; ... delete s1; delete s2; //все, как у людей.... если же уже STACK s1; STACK s2; то создавать указатели излишне: push(&s1, 3);
__________________ Хотели, как лучше, а получилось даже хуже... Лозунг шахматиста: На каждый шах - ответим матом! В сумасшедшем доме каждый мог говорить все, что взбредет ему в голову, словно в парламенте. Я. Гашек. "Приключения Бравого Солдата Швейка". Часть 1. Глава IV. Абзац 2. |
| | |
| | #9 | |
| Дошкольник Join Date: Jul 2002 Location: South Park
Posts: 82
Rep Power: 0 Reputation:
10 | Quote:
На лицо... или на лице, конфликт цивилизаций: Евразия поясняет суть проблемы и дает множество (причем правильных) решений, а Америка все твердит - НЕТ, эта программа не работает. Остается одно, бомбить эту программу, что бы свергнуть ненавистный баг, который только она и видит! Хотя весь баг в том, что та же Америка подходит к решения своими методами (причем неверными в корне) и твердо стоит на своем ![]() Ну что же, удачи тебе, Америка, в твоем крестовом (на который положили крест) походе ![]()
__________________ std::for_each( users.begin(), users.end(), std::bind2nd( std::mem_fun(&ForumMember::sendMessage), "Hello")) | |
| | |
| | #10 | |
| Administrator | Quote:
2 Nemra: тебе бы в Политикс.. ![]()
__________________ И повешенные могут качаться в неположенную сторону. /С.Е.Лец/ | |
| | |
| | #12 |
| Banned Join Date: Oct 2002 Location: Brooklyn, New York
Posts: 3,760
Rep Power: 0 Reputation:
10 | 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 ![]() |
| | |
| | #13 |
| Грустно... | По-моему не надо... пришли мне на майл верию с указателями я ее переделаю так, что будет пахать без них! ![]()
__________________ Хотели, как лучше, а получилось даже хуже... Лозунг шахматиста: На каждый шах - ответим матом! В сумасшедшем доме каждый мог говорить все, что взбредет ему в голову, словно в парламенте. Я. Гашек. "Приключения Бравого Солдата Швейка". Часть 1. Глава IV. Абзац 2. |
| | |
| | #14 | |
| Дошкольник Join Date: Jul 2002 Location: South Park
Posts: 82
Rep Power: 0 Reputation:
10 | Quote:
... до следующего раза.Действительно, 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")) | |
| | |
| | #15 |
| Грустно... | 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;
} ![]()
__________________ Хотели, как лучше, а получилось даже хуже... Лозунг шахматиста: На каждый шах - ответим матом! В сумасшедшем доме каждый мог говорить все, что взбредет ему в голову, словно в парламенте. Я. Гашек. "Приключения Бравого Солдата Швейка". Часть 1. Глава IV. Абзац 2. |
| | |