AKB Forums

Go Back   AKB Forums > Technical sections > Algorithms
Home Register Blogs FAQ Members List Calendar Downloads Arcade Mark Forums Read

Algorithms The source of algorithms for your project

Troubles when posting message? Click here! :: Проблемы с отправлением сообщения? Нажмите сюда!

Reply
 
LinkBack Thread Tools Display Modes
Old Mar 30, 2003, 20:09   #1
Banned
 
DaNYer's Avatar
 
Join Date: Oct 2002
Location: Brooklyn, New York
Posts: 3,760
Rep Power: 0
Reputation: 10
Question [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 : Mar 30, 2003 at 22:20.
DaNYer is offline   Reply With Quote Quote selected
Old Mar 31, 2003, 04:47   #2
Administrator
 
greka's Avatar
 
Join Date: Sep 2001
Location: @work
Posts: 5,337
Rep Power: 10
Reputation: 23
Send a message via ICQ to greka
странно, что у тебя вообще что-то работает

STACK *s1;
STACK *s2;

означает, что у тебя есть лишь указатели (а не реальные данные) - на что они указывают, DaNYer ?

черт-те знает на что.


STACK s1_data;
STACK s2_data;

STACK *s1 = &s1_data;
STACK *s2 = &s2_data;


вот тока после этого...
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
greka is offline   Reply With Quote Quote selected
Old Mar 31, 2003, 05:53   #3
Banned
 
DaNYer's Avatar
 
Join Date: Oct 2002
Location: Brooklyn, New York
Posts: 3,760
Rep Power: 0
Reputation: 10
Gar jan, privet
oni ukazivaiut na structure - stack

....

ya spat' poidu, pozdno ujo...

do zavtra
DaNYer is offline   Reply With Quote Quote selected
Old Mar 31, 2003, 06:52   #4
Administrator
 
greka's Avatar
 
Join Date: Sep 2001
Location: @work
Posts: 5,337
Rep Power: 10
Reputation: 23
Send a message via ICQ to greka
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*.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
greka is offline   Reply With Quote Quote selected
Old Apr 1, 2003, 05:10   #5
Banned
 
DaNYer's Avatar
 
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.....
DaNYer is offline   Reply With Quote Quote selected
Old Apr 1, 2003, 06:45   #6
Administrator
 
greka's Avatar
 
Join Date: Sep 2001
Location: @work
Posts: 5,337
Rep Power: 10
Reputation: 23
Send a message via ICQ to greka
Вот тебе работающий код:


Quote:
Originally posted by Greco
странно, что у тебя вообще что-то работает

STACK *s1;
STACK *s2;

означает, что у тебя есть лишь указатели (а не реальные данные) - на что они указывают, DaNYer ?

черт-те знает на что.


STACK s1_data;
STACK s2_data;

STACK *s1 = &s1_data;
STACK *s2 = &s2_data;


вот тока после этого...
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
greka is offline   Reply With Quote Quote selected
Old Apr 1, 2003, 07:45   #7
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,386
Rep Power: 10
Reputation: 125
Send a message via ICQ to Agregat Send a message via MSN to Agregat
Гарик, ты тоже муру написал...

s1 = new STACK;
s2 = new STACK;
...
delete s1;
delete s2;
//все, как у людей.... если же уже
STACK s1;
STACK s2;
то создавать указатели излишне:
push(&s1, 3);
__________________
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
В сумасшедшем доме каждый мог говорить все, что взбредет ему в голову, словно в парламенте.
Я. Гашек. "Приключения Бравого Солдата Швейка". Часть 1. Глава IV. Абзац 2.
Agregat is offline   Reply With Quote Quote selected
Old Apr 1, 2003, 14:21   #8
Banned
 
DaNYer's Avatar
 
Join Date: Oct 2002
Location: Brooklyn, New York
Posts: 3,760
Rep Power: 0
Reputation: 10
rebyataaaaaaaaaaaaaaa spasibo konechno, no vse ravno programma vidit toka odin stack a ne dva......
DaNYer is offline   Reply With Quote Quote selected
Old Apr 1, 2003, 21:34   #9
Дошкольник
 
Nemra's Avatar
 
Join Date: Jul 2002
Location: South Park
Posts: 82
Rep Power: 0
Reputation: 10
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"))
Nemra is offline   Reply With Quote Quote selected
Old Apr 2, 2003, 05:21   #10
Administrator
 
greka's Avatar
 
Join Date: Sep 2001
Location: @work
Posts: 5,337
Rep Power: 10
Reputation: 23
Send a message via ICQ to greka
Quote:
Originally posted by DaNYer
rebyataaaaaaaaaaaaaaa spasibo konechno, no vse ravno programma vidit toka odin stack a ne dva......
извини, тогда я просто умываю руки.

2 Nemra: тебе бы в Политикс..
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
greka is offline   Reply With Quote Quote selected
Old Apr 2, 2003, 13:56   #11
Banned
 
DaNYer's Avatar
 
Join Date: Oct 2002
Location: Brooklyn, New York
Posts: 3,760
Rep Power: 0
Reputation: 10
&
DaNYer is offline   Reply With Quote Quote selected
Old Apr 2, 2003, 13:59   #12
Banned
 
DaNYer's Avatar
 
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
DaNYer is offline   Reply With Quote Quote selected
Old Apr 2, 2003, 14:15   #13
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,386
Rep Power: 10
Reputation: 125
Send a message via ICQ to Agregat Send a message via MSN to Agregat
По-моему не надо... пришли мне на майл верию с указателями я ее переделаю так, что будет пахать без них!
__________________
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
В сумасшедшем доме каждый мог говорить все, что взбредет ему в голову, словно в парламенте.
Я. Гашек. "Приключения Бравого Солдата Швейка". Часть 1. Глава IV. Абзац 2.
Agregat is offline   Reply With Quote Quote selected
Old Apr 2, 2003, 15:07   #14
Дошкольник
 
Nemra's Avatar
 
Join Date: Jul 2002
Location: South Park
Posts: 82
Rep Power: 0
Reputation: 10
Quote:
Originally posted by DaNYer
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
Какое слово? предыдущий 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"))
Nemra is offline   Reply With Quote Quote selected
Old Apr 2, 2003, 15:18   #15
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,386
Rep Power: 10
Reputation: 125
Send a message via ICQ to Agregat Send a message via MSN to Agregat
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.
Agregat is offline   Reply With Quote Quote selected
Reply

« :-) | Stolbi »

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 22:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
This board was founded on September 29, 2001
Powered by Viper Internet

Affordable Web Hosting | ParevNet

Buy text link