Close
Close Window

Chapter 9 Linear Structures

Show Source |    | About   «  9.8. Stacks   ::   Contents   ::   9.10. Freelists  »

9.9. Linked Stacks

9.9.1. Linked Stack Implementation

The linked stack implementation is quite simple. Elements are inserted and removed only from the head of the list. A header node is not used because no special-case code is required for lists of zero or one elements. Here is the complete linked stack implementation.

Here is a visual representation for the linked stack.

Created with Raphaël 2.1.2
20
23
8
Created with Raphaël 2.1.2
12
15
top

9.9.1.1. Linked Stack Push

1 / 6 Settings
<<<>>>

Here is the push operation. First we see the linked stack before push

Created with Raphaël 2.1.2
    8
    Created with Raphaël 2.1.2
    12
    15
    top
    Proficient Saving... Error Saving
    Server Error
    Resubmit

    9.9.2. Linked Stack Pop

    1 / 6 Settings
    <<<>>>

    Method pop is also quite simple.

    Created with Raphaël 2.1.2
      23
      8
      Created with Raphaël 2.1.2
      12
      15
      top
      it
      Proficient Saving... Error Saving
      Server Error
      Resubmit

      9.9.2.1. Comparison of Array-Based and Linked Stacks

      All operations for the array-based and linked stack implementations take constant time, so from a time efficiency perspective, neither has a significant advantage. Another basis for comparison is the total space required. The analysis is similar to that done for list implementations. The array-based stack must declare a fixed-size array initially, and some of that space is wasted whenever the stack is not full. The linked stack can shrink and grow but requires the overhead of a link field for every element.

      When implementing multiple stacks, sometimes you can take advantage of the one-way growth of the array-based stack by using a single array to store two stacks. One stack grows inward from each end as illustrated by the figure below, hopefully leading to less wasted space. However, this only works well when the space requirements of the two stacks are inversely correlated. In other words, ideally when one stack grows, the other will shrink. This is particularly effective when elements are taken from one stack and given to the other. If instead both stacks grow at the same time, then the free space in the middle of the array will be exhausted quickly.

      Created with Raphaël 2.1.2
      top1
      top2

         «  9.8. Stacks   ::   Contents   ::   9.10. Freelists  »

      nsf
      Close Window