как написать программу C Получение стек негативных элементов целого линии в Язык программирования C ?
Solution:
- /*Получение стека из отрицательных элементов целочисленной очереди*/
- #include <iostream>
- #define MAX 10 //Максимальное кол-во элементов в стеке и очереди
- #define START 3 // Начало очереди
- struct Stack {
- int stack[MAX]; // массив данных стека
- int head =0; // индекс "верхушки" стека
- void s_push(int a, Stack *S) // запись в стек
- {
- if (S->head >= MAX) {
- printf("Стэк переполнен\n");
- return;
- }
- S->stack[S->head] = a;
- S->head++;
- }
- int s_pop(Stack *S) // чтение из стека
- {
- S->head--;
- if (S->head < 0) { printf("Стэк пуст\n"); exit(1); }
- else
- {
- return S->stack[S->head];
- }
- }
- };
- struct Queue
- {
- int queue[MAX]; // массив эл-тов очереди
- int beg=START; // начало очереди
- int end=START; // конец очереди
- int len=0; // кол-во элементов
- bool empty(Queue *Q) //проверка очереди на пустоту
- {
- if (Q->len == 0) return true;
- else return false;
- }
- void q_push(Queue *Q, int value) //добавление элемента очереди
- {
- if (Q->len >= MAX)
- {
- printf("\nОчередь переполнена\n\n"); exit(1);
- }
- else
- {
- Q->queue[end]=value;
- Q->end = (Q->end + 1) % MAX;
- Q->len++;
- }
- }
- int q_pop(Queue *Q) // чтение из очереди
- {
- if (empty(Q)) { printf("\nОчередь пуста\n\n"); exit(1); }
- else {
- int value = Q->queue[beg];
- Q->beg = (Q->beg + 1)%MAX;
- Q->len--;
- return value;
- }
- }
- };
- int main()
- {
- setlocale(LC_ALL, "Russian");
- Queue a; //очередь
- Stack b; //стек
- FILE *FP = fopen("in.txt", "r");
- if (!FP) { puts("Не удалось открыть файл"); return 1; }
- else
- {
- fseek(FP, 0, SEEK_END);
- long pos = ftell(FP);
- if (pos <= 0) { puts("Файл пуст"); return 2; }
- else
- {
- rewind(FP);
- int buf; // переменная для считывания чисел из файла
- while (!feof(FP)) // считывание чисел из файла в очередь
- {
- fscanf(FP, "%d", &buf);
- a.q_push(&a, buf);
- }
- fclose(FP);
- bool isEmpty = true;
- puts("Элементы очереди:");
- while (!a.empty(&a)) // пока очередь не пуста, заполняем стек
- {
- buf = a.q_pop(&a);
- printf("%d ", buf);
- if (buf < 0) {
- b.s_push(buf, &b);
- isEmpty = false;
- }
- }
- FP = fopen("out.txt", "w");
- int out;
- if (!isEmpty){
- printf("\nПолученный стэк:\n");
- while (b.head) // вывод данных стека
- {
- out = b.s_pop(&b);
- printf("%d ", out);
- fprintf(FP, "%d ", out);
- }
- printf("\n");
- }
- else{
- puts("\nОтрицательных элементов в очереди не оказалось");
- }
- }
- }
- }