• edited by
48,168 views
66 66 votes

A single array $A[1 \ldots \text{MAXSIZE}]$ is used to implement two stacks. The two stacks grow from opposite ends of the array. Variables $top1$ and $top2$ $(top1 < top 2)$ point to the location of the topmost element in each of the stacks. If the space is to be used efficiently, the condition for $\text{“}\textsf{stack full}\text{”}$ is

  1. $(top1 = \text{MAXSIZE} / 2)$ and $(top2 = \text{MAXSIZE} / 2 + 1)$

  2. $top1 + top2 = \text{MAXSIZE}$

  3. $(top1 = \text{MAXSIZE} / 2)$ or $(top2 = \text{MAXSIZE})$

  4. $top1 = top2 - 1$

7 Answers

Best answer
88 88 votes

Answer is (D).

Since the stacks are growing from opposite ends, initially $top1 = 1$ and $top2 = MAXSIZE$. Now, to make the space usage most efficient we should allow one stack to use the maximum possible space as long as other stack doesn't need it. So, either of the stack can grow as long as there is space on the array and hence the condition must be $top1 = top2 - 1$.

• edited by
44 44 votes

Consider array with 10 index:

top1                                              top2

Now seek Top1+ Top2= maxsize but stack contain 2 elements only. So Option B is fail.

12      13   14    15     16    17   18      19 (top1)     21(top2)   20  

here top1= top2-1 shows stack is full only. So Option D is correct.

                          top1                          top2

We see here stack is not full so condition Fail. So Option C is fail.

Option A is says both array have same size but there may be case that stack 2 contain 1 element and stack 2 contain 9 elements , which is not possible with case A.

D is answer

7 7 votes

Look at how heap and stack sections are incorporated in the Runtime Environment.

That is the most efficient way to utilize the space. If we divide the space by half, what if one entity requires 60% of the space, while the other entity requires none? Halving the available space is an inefficient way to utilize it.

Efficient utilization would be to let a stack take up all the space if the other stack doesn't want it.

 

For the array [1...MaxSize] Let top1 point to 0, and top2 point to MaxSize+1 in the beginning, since both the stacks are empty.

Stack full will be when:-

Option D

6 6 votes

The idea is to start two stacks from two extreme corners of arr[]. stack1 starts from the leftmost element, the first element in stack1 is pushed at index 0. The stack2 starts from the rightmost corner, the first element in stack2 is pushed at index (n-1). Both stacks grow (or shrink) in opposite direction. To check for overflow, all we need to check is for space between top elements of both stacks

refer:

http://www.geeksforgeeks.org/implement-two-stacks-in-an-array/

1 1 vote

The correct answer is D. $top1 = top2 - 1$.

 

Explanation

 

To implement two stacks efficiently in a single array $A[1 \dots \text{MAXSIZE}]$, the standard approach is to have them grow from opposite ends towards the middle. This allows one stack to use any available free space, even if the other stack is empty.

  1. Stack 1 Setup:

    • Starts at the beginning of the array (index 1).

    • Grows upwards (incrementing the index).

    • $top1$ points to the current top element of Stack 1.

  2. Stack 2 Setup:

    • Starts at the end of the array (index $\text{MAXSIZE}$).

    • Grows downwards (decrementing the index).

    • $top2$ points to the current top element of Stack 2.

  3. The "Full" Condition:

    • The array is not full as long as there is at least one empty slot between the top of Stack 1 and the top of Stack 2.

    • The stacks meet when the pointer for Stack 1 ($top1$) is immediately adjacent to the pointer for Stack 2 ($top2$).

    • Visually, the array looks like this when full: [... Stack 1 elements ..., top1, top2, ... Stack 2 elements ...]

    • Mathematically, this means the index of $top2$ is exactly one greater than the index of $top1$.

    $$top2 = top1 + 1$$

    Rearranging this equation gives:

     

    $$top1 = top2 - 1$$

 

Why other options are incorrect:

 

  • A. $(top1 = \text{MAXSIZE}/2)$ and $(top2 = \text{MAXSIZE}/2 + 1)$: This describes a specific case where both stacks have an equal number of elements. However, "efficient use of space" means Stack 1 could have 1 element and Stack 2 could have 99 (in a size 100 array). This option is too restrictive.

  • B. $top1 + top2 = \text{MAXSIZE}$: This equation does not represent the collision of pointers. For example, in an array of size 10, if Stack 1 has 1 element (at index 1) and Stack 2 has 2 elements (at indices 9, 10, so top2=9), the array isn't full, yet $1 + 9 = 10$.

  • C. $(top1 = \text{MAXSIZE}/2)$ or $(top2 = \text{MAXSIZE})$: This again refers to fixed boundaries rather than the dynamic relationship between the two stack pointers.

–3 –3 votes
I think both A and D are correct.actually both defining same thing.
Answer:
Position:
Show:

Related questions

27 27 votes
4 answers 4 answers
11.2k
11.2k views
Kathleen asked Sep 18, 2014
11,199 views
The best data structure to check whether an arithmetic expression has balanced parentheses is aqueuestacktreelist
38 38 votes
3 answers 3 answers
9.8k
9.8k views
Kathleen asked Sep 18, 2014
9,814 views
The elements $32, 15, 20, 30, 12, 25, 16,$ are inserted one by one in the given order into a maxHeap. The resultant maxHeap is
32 32 votes
5 answers 5 answers
13.9k
13.9k views
Kathleen asked Sep 18, 2014
13,866 views
Given the following input $(4322, 1334, 1471, 9679, 1989, 6171, 6173, 4199)$ and the hash function $x$ mod $10$, which of the following statements are true?$9679, 1989, 4...
31 31 votes
3 answers 3 answers
10.4k
10.4k views
Kathleen asked Sep 18, 2014
10,413 views
Level order traversal of a rooted tree can be done by starting from the root and performingpreorder traversalin-order traversaldepth first searchbreadth first search