// C++ program to sort a stack using recursion
#include <iostream>
using namespace std;
// Stack is represented using linked list
struct stack
{ int data; struct stack *next;
};
// Utility function to initialize stack
void initStack(struct stack **s)
{ *s = NULL;
}
// Utility function to chcek if stack is empty
int isEmpty(struct stack *s)
{ if (s == NULL) retu 1; retu 0;
}
// Utility function to push an item to stack
void push(struct stack **s, int x)
{ struct stack *p = (struct stack *)malloc(sizeof(*p)); if (p == NULL) { fprintf(stderr, "Memory allocation failed.n"); retu; } p->data = x; p->next = *s; *s = p;
}
// Utility function to remove an item from stack
int pop(struct stack **s)
{ int x; struct stack *temp; x = (*s)->data; temp = *s; (*s) = (*s)->next; free(temp); retu x;
}
// Function to find top item
int top(struct stack *s)
{ retu (s->data);
}
// Recursive function to insert an item x in sorted way
void sortedInsert(struct stack **s, int x)
{ // Base case: Either stack is empty or newly inserted // item is greater than top (more than all existing) if (isEmpty(*s) or x > top(*s)) { push(s, x); retu; } // If top is greater, remove the top item and recur int temp = pop(s); sortedInsert(s, x); // Put back the top item removed earlier push(s, temp);
}
// Function to sort stack
void sortStack(struct stack **s)
{ // If stack is not empty if (!isEmpty(*s)) { // Remove the top item int x = pop(s); // Sort remaining stack sortStack(s); // Push the top item back in sorted stack sortedInsert(s, x); }
}
// Utility function to print contents of stack
void printStack(struct stack *s)
{ while (s) { cout << s->data << " "; s = s->next; } cout << "n";
}
// Driver Program
int main(void)
{ struct stack *top; initStack(&top); push(&top, 30); push(&top, -5); push(&top, 18); push(&top, 14); push(&top, -3); cout << "Stack elements before sorting:n"; printStack(top); sortStack(&top); cout << "n"; cout << "Stack elements after sorting:n"; printStack(top); retu 0;
}
+ نوشته شده در چهارشنبه 6 فروردين 1399 ساعت: 3:52 توسط محمد رضا جوادیان
برچسب ها:
|