Not Yet Answered # Implementation of Stacks and Queues

fahad 3 fahad 3 Discussion Starter komalac fahad 3 fahad 3 fahad 3 pavan fahad 3 pavan fahad 3 Need some help with this Array. I am trying to get the sum of the even numbers and the sum of the odd numbers using a for each loop. I know the answers to what I am trying to achive are sum of even = 84 and the sum of ...

0

Hello,

Its very simple to use 2 stacks to maintain one queue

the algorithm goes likem this

declare two stacks st1 and st2

whenever u want to enqueue an element in the queue simply push it in the stack st1

when u want to dequeue an element pop all the elements from st1 one by one and push them in st2 (now st2 contains the elements in inverse order then that of previous st1)

Pop first element from st2 , (remember st1 is empty at this time) , this element is the required element which was to be dequeued

Then push all the element form st2 one by one and push them back in st1

******************************************************

For example

To Enqueue

We want to enqueue 29

Originally

St1 St2

26 Empty

25

18

15

10

12

St1.push(29) //To insert Insert 29

St1 St2

29 Empty

26

25

18

15

10

12

To Dequeue

We want to dequeue 12 as it was the first element to be enqueued

originally

St1 St2

29 Empty

26

25

18

15

10

12

While(st1 is not empty)

St2.push(st1.pop);//pop elements from st1 and push them in St2

St1 ST2

Empty 12

10

15

18

25

26

29

int result = St2.Pop() // it will give result 12

now

St1 ST2

Empty 10

15

18

25

26

29

then again

While(st2 is not empty)

St1.push(st2.pop);//pop elements from st1 and push them in St2

St1 St2

29 Empty

26

25

18

15

10

*********************************************************

If u want to check isEmpty() just check if st1 is Empty.

I hope u will understand it , if their is still any confusion u can ask.......

Fahad

0

there is some problem in the above example as the format is changed so some members of the stack are out of their places

/*problamatic area

St2.push(st1.pop);//pop elements from st1 and push them in St2

St1 ST2

Empty 12

10

15

18

25

26

29

int result = St2.Pop() // it will give result 12

now

St1 ST2

Empty 10

15

18

25

26

29

*/

It should be like this

St2.push(st1.pop);//pop elements from st1 and push them in St2

St1 ST2

Empty 12

............10

............15

............18

............25

............26

............29

int result = St2.Pop() // it will give result 12

now

St1 ST2

Empty 10

............15

............8

............25

............26

............29

Fahad

0

Thanks a lot :))

Very clear explanation. I got it.

Do you know the other logic (2 stack with an array).

Thanks again,

Komala.

0

hello;

yes i think know it also but let me think for five minutes and then i will post it

Fahad

0

hi;

make an array

declare two stacks St1 and St2

make top1==-1 for st1 and top2==MAX_SIZE

when u push an element in st1

push it as st1.push(int x){ top1++; array[top1]=x;}

when u push an element in st2

push it as st1.push(int x){ top2--; array[top2]=x;}

when u pop an element from st1

pop it as st1.pop(){top1--; return array[top1++]=x;}

when u pop an element from st2

pop it as st2.pop(){top1++; return array[top2--]=x;}

I hope u will understand it also.

fahad

1

hi ,

The above mentioned way is actually to way growing array , stack 1 grows from left to right and stack 2 grows from right to left

tell me if their is still any problem reagrding it

0

Fahad,

The solution you have suggested for 2 stacks in an arry, in that you mean to say that there should be 2 classes for two stacks ???

Can you clarify this to me ?

hi,

So u got both of them ,

thats good

r u indian?

0

Hi pavan;

By saying two stacks in an array I dont mean two different classes,

It could be handeled in a single class ,

but the difference will be that the class will contain two pointers ,although in simple stack class there is only one pointer pointing towards the top element ,

This class containing two stacks will contain two pointers Top1 and Top2

Top1 will move with the expansion of stack1 while Top2 will move with the expansion of stack2.

Also Top1 will be incremented each time when an element is pushed into stack1 while Top2 will be decremented each time when an element is pushed into stack2. and opposite would be the case with Pop operation

but dont forget to make top1==-1 for st1 and top2==MAX_SIZE in the constructor.................

I hope u would have understand it ...............

If still therz some doubt , feel free to ask it again....

Bye

Fahad

0

Fahad,

Thank you for your clarification. So if we place 2 stacks in the same class then we may need 2 push functions, 2 pop functions right?

one for each stack as they want different expressions to be included in those functions.

would it be good to do like that?

Hi pavan;

By saying two stacks in an array I dont mean two different classes,

It could be handeled in a single class ,

but the difference will be that the class will contain two pointers ,although in simple stack class there is only one pointer pointing towards the top element ,

This class containing two stacks will contain two pointers Top1 and Top2

Top1 will move with the expansion of stack1 while Top2 will move with the expansion of stack2.

Also Top1 will be incremented each time when an element is pushed into stack1 while Top2 will be decremented each time when an element is pushed into stack2. and opposite would be the case with Pop operation

but dont forget to make top1==-1 for st1 and top2==MAX_SIZE in the constructor.................I hope u would have understand it ...............

If still therz some doubt , feel free to ask it again....Bye

Fahad

0

Hi;

yes u r right, u have to use two push and two pops,

where as this is concerned that it is good or not , u would have to understand why we use two stacks within an array , the reason is quite simple , in making two stacks in the same array , here we use only one data structure at a time but we can use it for two different puposes ,stack1 for some purpose and stack2 for some separate purpose,

also we achieve optimal use of given space,

Hope u would understand it easily , but still dont hesitate to ask again...if u have some problem

Fahad

This article has been dead for over six months. Start a new discussion instead.

Recommended Articles

When I execute this progammatically, I get a table with row heights much larger than when I do this manually.

Note : Sel is the Word.Selection object and the Clipboard contains an Excel Table.

```
public void AddClipboard()
{
Sel.PasteExcelTable(false,false, false);
var t = Sel.Tables[Sel.Tables.Count];
t.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitContent);
}
```

the function that I created to find the ...