Advertisement
Guest User

Untitled

a guest
May 25th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.24 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <class T>
  5. struct Node {
  6.     T data;
  7.     Node<T> *next = NULL;
  8. };
  9.  
  10. template <class T>
  11. struct Stack {
  12.     Node<T> *top = NULL;
  13.     int size = 0;
  14. };
  15.  
  16. template <class T>
  17. bool isEmptyStack(Stack<T> *s) {
  18.     return (s->size == 0);
  19. }
  20.  
  21. template <class T>
  22. void push(Stack<T> *&s, T newData) {
  23.     Node<T> *newNode = new Node<T>;
  24.     newNode->data = newData;
  25.     newNode->next = s->top;
  26.     s->top = newNode;
  27.     s->size += 1;
  28.     return;
  29. }
  30.  
  31. template <class T>
  32. bool pop(Stack<T> *&s, T &dataOut) {
  33.     if (isEmptyStack(s)) return false;
  34.     dataOut = s->top->data;
  35.     Node<T> *temp = s->top;
  36.     s->top = temp->next;
  37.     s->size -= 1;
  38.     delete temp; temp = NULL;
  39.     return true;
  40. }
  41.  
  42. template <class T>
  43. void printStack(Stack<T> *s) {
  44.     Node<T> *temp = s->top;
  45.     while (temp != NULL) {
  46.         cout << temp->data << " ";
  47.         temp = temp->next;
  48.     }
  49.     cout << endl;
  50. }
  51.  
  52. template <class T>
  53. void freeMemoryStack(Stack<T> *&s) {
  54.     Node<T> *temp = s->top;
  55.     while (temp != NULL) {
  56.         Node<T> *next = temp->next;
  57.         delete temp;
  58.         temp = next;
  59.     }
  60.     s->top = NULL;
  61.     s->size = 0;
  62. }
  63.  
  64. template <class T>
  65. struct Queue {
  66.     Node<T> *front = NULL;
  67.     Node<T> *rear = NULL;
  68.     int size = 0;
  69. };
  70.  
  71. template <class T>
  72. bool isEmptyQueue(Queue<T> *q) {
  73.     return (q->size == 0);
  74. }
  75.  
  76. template <class T>
  77. void enqueue(Queue<T> *q, T newData) {
  78.     Node<T> *newNode = new Node<T>;
  79.     newNode->data = newData;
  80.     if (isEmptyQueue(q)) {
  81.         q->front = newNode;
  82.     }
  83.     else q->rear->next = newNode;
  84.     q->rear = newNode;
  85.     q->size += 1;
  86.     return;
  87. }
  88.  
  89. template <class T>
  90. bool dequeue(Queue<T> *q, T &dataOut) {
  91.     if (isEmptyQueue(q)) return false;
  92.     dataOut = q->front->data;
  93.     Node<T> *temp = q->front;
  94.     if (q->size == 1) q->rear = NULL;
  95.     q->front = temp->next;
  96.     q->size -= 1;
  97.     delete temp; temp = NULL;
  98.     return true;
  99. }
  100.  
  101. template <class T>
  102. void printQueue(Queue<T> *q) {
  103.     if (isEmptyQueue(q)) return;
  104.     Node<T> *temp = q->front;
  105.     while (temp != NULL) {
  106.         cout << temp->data << endl;
  107.         temp = temp->next;
  108.     }
  109.     cout << endl;
  110. }
  111.  
  112. template <class T>
  113. void freeMemoryQueue(Queue<T> *&q) {
  114.     Node<T> *temp = q->front;
  115.     while (temp != NULL) {
  116.         Node<T> *next = temp->next;
  117.         delete temp;
  118.         temp = next;
  119.     }
  120.     q->front = NULL;
  121.     q->rear = NULL;
  122.     q->size = 0;
  123. }
  124.  
  125.  
  126. void Sort(Stack<int> *&stack) {
  127.     Queue<int> *queue = new Queue<int>;
  128.     int sizeStack = stack->size;
  129.     int valueStack;
  130.     for (int i = 0; i < sizeStack; i++) {
  131.         pop(stack, valueStack);
  132.         int sizeQueue = queue->size;
  133.         int valueQueue;
  134.         for (int j = 0; j < sizeQueue; j++) {
  135.             dequeue(queue, valueQueue);
  136.             if (valueStack < valueQueue) {
  137.                 enqueue(queue, valueStack);
  138.                 valueStack = valueQueue;
  139.             }
  140.             else {
  141.                 enqueue(queue, valueQueue);
  142.             }
  143.  
  144.         }
  145.         enqueue(queue, valueStack);
  146.     }
  147.     while (!isEmptyQueue(queue)) {
  148.         int value;
  149.         dequeue(queue, value);
  150.         push(stack, value);
  151.     }
  152.     delete queue; queue = NULL;
  153. }
  154.  
  155. int main() {
  156.     const int n = 6;
  157.     int arr[n] = { 23,78,45,8,32,56 };
  158.     Stack<int> *stack = new Stack<int>;
  159.     for (int i = 0; i < n; i++) {
  160.         push(stack, arr[i]);
  161.     }
  162.     cout << "Danh sach ban dau: ";
  163.     printStack(stack);
  164.    
  165.     Sort(stack);
  166.     cout << "Danh sach sau khi sap xep: ";
  167.     printStack(stack);
  168.  
  169.     freeMemoryStack(stack);
  170.     delete stack; stack = NULL;
  171.  
  172.     system("pause");
  173.     return 0;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement