С Программа Получение стек негативных элементов целого линии

как написать программу C Получение стек негативных элементов целого линии в Язык программирования C ?

Solution:

  1. /*Получение стека из отрицательных элементов целочисленной очереди*/
  2. #include <iostream>
  3. #define MAX 10     //Максимальное кол-во элементов в стеке и очереди
  4. #define START 3    // Начало очереди
  5. struct Stack {
  6.         int stack[MAX]; // массив данных стека
  7.         int head =0;   // индекс "верхушки" стека
  8.         void s_push(int a, Stack *S) // запись в стек
  9.         {
  10.                 if (S->head >= MAX) {
  11.                         printf("Стэк переполнен\n");
  12.                         return;
  13.                 }
  14.                 S->stack[S->head] = a;
  15.                 S->head++;
  16.         }
  17.         int s_pop(Stack *S)   // чтение из стека
  18.         {
  19.                 S->head--;
  20.                 if (S->head < 0) { printf("Стэк пуст\n"); exit(1); }
  21.                 else
  22.                 {
  23.                         return S->stack[S->head];
  24.                 }
  25.         }
  26. };
  27. struct Queue
  28. {
  29.         int queue[MAX];  // массив эл-тов очереди
  30.         int beg=START;      // начало очереди
  31.         int end=START;              // конец очереди
  32.         int len=0;              // кол-во элементов
  33.         bool empty(Queue *Q) //проверка очереди на пустоту
  34.         {
  35.                 if (Q->len == 0) return true;
  36.                 else return false;
  37.         }
  38.         void q_push(Queue *Q, int value) //добавление элемента очереди
  39.         {
  40.                 if (Q->len >= MAX)
  41.                 {
  42.                         printf("\nОчередь переполнена\n\n"); exit(1);
  43.                 }
  44.                 else
  45.                 {
  46.                         Q->queue[end]=value;
  47.                         Q->end = (Q->end + 1) % MAX;
  48.                         Q->len++;
  49.                        
  50.                 }
  51.         }
  52.         int q_pop(Queue *Q)  // чтение из очереди
  53.         {
  54.                 if (empty(Q)) { printf("\nОчередь пуста\n\n"); exit(1); }
  55.                 else {
  56.                         int value = Q->queue[beg];
  57.                         Q->beg = (Q->beg + 1)%MAX;
  58.                         Q->len--;
  59.                        
  60.                         return value;
  61.                 }
  62.         }
  63. };
  64. int main()
  65. {
  66.         setlocale(LC_ALL, "Russian");
  67.         Queue a;  //очередь
  68.         Stack b;  //стек
  69.         FILE *FP = fopen("in.txt", "r");
  70.         if (!FP) { puts("Не удалось открыть файл"); return 1; }
  71.         else
  72.         {
  73.                 fseek(FP, 0, SEEK_END);
  74.                 long pos = ftell(FP);
  75.                 if (pos <= 0) { puts("Файл пуст"); return 2; }
  76.                 else
  77.                 {
  78.                         rewind(FP);
  79.                         int buf;  // переменная для считывания чисел из файла
  80.                         while (!feof(FP)) // считывание чисел из файла в очередь
  81.                         {
  82.                                 fscanf(FP, "%d", &buf);
  83.                                 a.q_push(&a, buf);
  84.                         }
  85.                         fclose(FP);
  86.                         bool isEmpty = true;
  87.                         puts("Элементы очереди:");
  88.                         while (!a.empty(&a)) // пока очередь не пуста, заполняем стек
  89.                         {
  90.                                 buf = a.q_pop(&a);
  91.                                 printf("%d ", buf);
  92.                                 if (buf < 0) {
  93.                                         b.s_push(buf, &b);
  94.                                         isEmpty = false;
  95.                                 }
  96.                         }
  97.                         FP = fopen("out.txt", "w");
  98.                         int out;
  99.                         if (!isEmpty){
  100.                                 printf("\nПолученный стэк:\n");
  101.                                 while (b.head)              // вывод данных стека
  102.                                 {
  103.                                         out = b.s_pop(&b);
  104.                                         printf("%d ", out);
  105.                                         fprintf(FP, "%d ", out);
  106.                                 }
  107.                                 printf("\n");
  108.                         }
  109.                         else{
  110.                                 puts("\nОтрицательных элементов в очереди не оказалось");
  111.                         }
  112.                 }
  113.         }
  114. }


Learn More :