Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
C++ Program to Implement Stack using array
A stack is an abstract data structure that contains a collection of elements. Stack implements the LIFO mechanism i.e. the element that is pushed at the end is popped out first. Some of the principle operations in the stack are ?
Push - This adds a data value to the top of the stack.
Pop - This removes the data value on top of the stack
Peek - This returns the top data value of the stack
A program that implements a stack using array is given as follows.
Example
<span class="com">#include</span><span class="pln"> </span><span class="str"><iostream></span><span class="pln">
</span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">namespace</span><span class="pln"> std</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> stack</span><span class="pun">[</span><span class="lit">100</span><span class="pun">],</span><span class="pln"> n</span><span class="pun">=</span><span class="lit">100</span><span class="pun">,</span><span class="pln"> top</span><span class="pun">=-</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> push</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> val</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">top</span><span class="pun">>=</span><span class="pln">n</span><span class="pun">-</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack Overflow"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
top</span><span class="pun">++;</span><span class="pln">
stack</span><span class="pun">[</span><span class="pln">top</span><span class="pun">]=</span><span class="pln">val</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> pop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">top</span><span class="pun"><=-</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack Underflow"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"The popped element is "</span><span class="pun"><<</span><span class="pln"> stack</span><span class="pun">[</span><span class="pln">top</span><span class="pun">]</span><span class="pln"> </span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
top</span><span class="pun">--;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> display</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">top</span><span class="pun">>=</span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack elements are:"</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> i</span><span class="pun">=</span><span class="pln">top</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">>=</span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">--)</span><span class="pln">
cout</span><span class="pun"><<</span><span class="pln">stack</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]<<</span><span class="str">" "</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack is empty"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> ch</span><span class="pun">,</span><span class="pln"> val</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"1) Push in stack"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"2) Pop from stack"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"3) Display stack"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"4) Exit"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">do</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Enter choice: "</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cin</span><span class="pun">>></span><span class="pln">ch</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">ch</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">1</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Enter value to be pushed:"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cin</span><span class="pun">>></span><span class="pln">val</span><span class="pun">;</span><span class="pln">
push</span><span class="pun">(</span><span class="pln">val</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
pop</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">3</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
display</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">4</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Exit"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">default</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Invalid Choice"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="kwd">while</span><span class="pun">(</span><span class="pln">ch</span><span class="pun">!=</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span>
Output
1) Push in stack 2) Pop from stack 3) Display stack 4) Exit Enter choice: 1 Enter value to be pushed: 2 Enter choice: 1 Enter value to be pushed: 6 Enter choice: 1 Enter value to be pushed: 8 Enter choice: 1 Enter value to be pushed: 7 Enter choice: 2 The popped element is 7 Enter choice: 3 Stack elements are:8 6 2 Enter choice: 5 Invalid Choice Enter choice: 4 Exit
In the above program, the push() function takes argument val i.e., value to be pushed into the stack. If a top is greater than or equal to n, there is no space in a stack and overflow is printed. Otherwise, val is pushed into the stack. The code snippet for this is as follows.
<span class="kwd">void</span><span class="pln"> push</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> val</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">top</span><span class="pun">>=</span><span class="pln">n</span><span class="pun">-</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack Overflow"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
top</span><span class="pun">++;</span><span class="pln">
stack</span><span class="pun">[</span><span class="pln">top</span><span class="pun">]=</span><span class="pln">val</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span>
The pop() function pops the topmost value of the stack, if there is any value. If the stack is empty then underflow is printed. This is given as follows.
<span class="kwd">void</span><span class="pln"> pop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">top</span><span class="pun"><=-</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack Underflow"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"The popped element is "</span><span class="pun"><<</span><span class="pln"> stack</span><span class="pun">[</span><span class="pln">top</span><span class="pun">]</span><span class="pln"> </span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
top</span><span class="pun">--;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span>
The display() function displays all the elements in the stack. It uses a for loop to do so. If there are no elements in the stack, then Stack is empty is printed. This is given below.
<span class="kwd">void</span><span class="pln"> display</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">top</span><span class="pun">>=</span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack elements are:"</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> i</span><span class="pun">=</span><span class="pln">top</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">>=</span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">--)</span><span class="pln">
cout</span><span class="pun"><<</span><span class="pln">stack</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]<<</span><span class="str">" "</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="kwd">else</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Stack is empty"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span>
The function main() provides a choice to the user if they want to push, pop or display the stack. According to the user response, the appropriate function is called using switch. If the user enters an invalid response, then that is printed. The code snippet for this is given below.
<span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> ch</span><span class="pun">,</span><span class="pln"> val</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"1) Push in stack"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"2) Pop from stack"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"3) Display stack"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"4) Exit"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">do</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Enter choice: "</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cin</span><span class="pun">>></span><span class="pln">ch</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">switch</span><span class="pun">(</span><span class="pln">ch</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">1</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Enter value to be pushed:"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
cin</span><span class="pun">>></span><span class="pln">val</span><span class="pun">;</span><span class="pln">
push</span><span class="pun">(</span><span class="pln">val</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
pop</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">3</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
display</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">4</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Exit"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">default</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
cout</span><span class="pun"><<</span><span class="str">"Invalid Choice"</span><span class="pun"><<</span><span class="pln">endl</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="kwd">while</span><span class="pun">(</span><span class="pln">ch</span><span class="pun">!=</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span> 