Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.50 KB | None | 0 0
  1. struct Stack {                      //Стек
  2.     char key;
  3.     struct Stack *next;
  4. } *St = NULL;
  5.  
  6. struct Queue {                      //Очередь
  7.     char key;
  8.     struct Queue *next;
  9. } *Head = NULL;
  10.  
  11. void Push(Stack **top, char data)   //Добавление в стек
  12. {
  13.     Stack *tmp = new Stack;
  14.     tmp->key = data;
  15.     tmp->next = *top;
  16.     *top = tmp;
  17. }
  18.  
  19. char Pop(Stack **top)               //Получение данных из стека и постепенное освобождение памяти из под него
  20. {
  21.     char temp = (*top)->key;
  22.  
  23.     Stack *tmp = *top;
  24.     *top = (*top)->next;
  25.     delete tmp;
  26.  
  27.     return temp;
  28. }
  29.  
  30. Queue * First(char data)            //Для первого элемента в очереди
  31. {
  32.     Queue *tmp = new Queue;
  33.  
  34.     tmp->next = NULL;
  35.     tmp->key = data;
  36.  
  37.     return tmp;
  38. }
  39.  
  40. void Insert(Queue* &Head, char x)   //Добавление элементов в очередь
  41. {
  42.     Queue *tmp = Head,
  43.         *NewNode = new Queue;       //Создание нового узла
  44.  
  45.     if (Head == NULL) {             //Если очередь еще пуста
  46.         Head = First(x);            //Вставляем первый элемент
  47.         return;
  48.     }
  49.  
  50.     NewNode->key = x;                   //Иначе заполняем данными новый узел
  51.     NewNode->next = NULL;
  52.  
  53.     while (tmp->next) tmp = tmp->next;  //Находим для него место в самом конце очереди
  54.  
  55.     tmp->next = NewNode;                //И ставим его в это место
  56. }
  57.  
  58. void PrintQueue(Queue* Head)        //Вывод очереди
  59. {
  60.     Queue* tmp = Head;
  61.  
  62.     while (tmp) {
  63.         printf("%c ", tmp->key);
  64.         tmp = tmp->next;
  65.     }
  66. }
  67.  
  68. int _tmain(int argc, _TCHAR* argv[])
  69. {
  70.     char a;
  71.     setlocale(LC_CTYPE, "Russian");                     //Подключение русского языка
  72.     printf("Введите символы (Окончание ввода 0): ");
  73.  
  74.     while (1) {                                         //Бесконечный цикл для ввода данных в стек
  75.         scanf("%c", &a);
  76.         if (a == '0') break;                            //Выход по нулю
  77.         Push(&St, a);
  78.     }
  79.  
  80.     while (St) {
  81.         char tmp = Pop(&St);                            //Получение символа со стека
  82.  
  83.         if (!(tmp >= 'a' && tmp <='z' || tmp >= 'A' && tmp <= 'Z'))     //Проверка символа. Истина, если не буква
  84.             Insert(Head, tmp);                          //Заполнение очереди не буквами
  85.     }
  86.  
  87.     printf("\nОчередь с не буквами: ");
  88.     PrintQueue(Head);
  89.  
  90.     free(Head);                                         //Высвобождение памяти из под очереди
  91.  
  92.     system("PAUSE");
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement