A directory of Objective Type Questions covering all the Computer Science subjects. Here you can access and discuss Multiple choice questions and answers for various compitative exams and interviews.

C program to reverse a stack using recursion


Problem Description


This C program reverses the elements of a stack using Recursion. Here, Stack is represented using a linked list. A linked list is an ordered set of data elements, each containing a link to its successor.


C program to reverse a stack using recursion - Source code
     
                
  /*
 C Program to Reverse a Stack using Recursion.
 */

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int n;
    struct node *next;
};

void generate_stack(struct node **);
void display_stack(struct node *);
void stack_reverse(struct node **, struct node **);
void delete(struct node **);

int main()
{
    struct node *head = NULL;

    generate_stack(&head);
    printf("\nThe sequence of contents in stack\n");
    display_stack(head);
    printf("\nReversing the contents of the stack\n");
    if (head != NULL)
    {
        stack_reverse(&head, &(head->next));
    }
    printf("\nThe contents in stack after reversal\n");
    display_stack(head);
    delete(&head);

    return 0;
}

void stack_reverse(struct node **head, struct node **head_next)
{
    struct node *temp;

    if (*head_next != NULL)
    {
         temp = (*head_next)->next;
        (*head_next)->next = (*head);
        *head = *head_next;
        *head_next = temp;
        stack_reverse(head, head_next);
    }
}

void display_stack(struct node *head)
{
    if (head != NULL)
    {
        printf("%d  ", head->n);
        display_stack(head->next);
    }
}

void generate_stack(struct node **head)
{
    int num, i;
    struct node *temp;

    printf("Enter length of list: ");
    scanf("%d", &num);
    for (i = num; i > 0; i--)
    {
        temp = (struct node *)malloc(sizeof(struct node));
        temp->n = i;
        if (*head == NULL)
        {
            *head = temp;
            (*head)->next = NULL;
        }
        else
        {
            temp->next = *head;
            *head = temp;
        }
    }
}

void delete(struct node **head)
{
    struct node *temp;
    while (*head != NULL)
    {
        temp = *head;
        *head = (*head)->next;
        free(temp);
    }
}

     
      

Program Output


Enter length of list: 20

The sequence of contents in stack
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20
Reversing the contents of the stack

The contents in stack after reversal
20  19  18  17  16  15  14  13  12  11  10  9  8  7  6  5  4  3  2  1

Program Explanation


1. This C program comprises of four major functions. These functions are for generating stack, to display the generated stack, to reverse the stack and finally to free the memory.

2. Here stack in implemented using a linked list. Stack is simply created in the form of a list starting form 1 up to the number entered by the user.

3. The stack is reversed using the recursion. The function stack_reverse is called recursively until the next of node becomes null. The elements of the list are swapped with the next element using a temporary list.

4. Function display_stack is used to display the contents of the list at any time.