C/C++

НАПИШИТЕ ПОЖАЛУЙСТА ПРОГРАММУ НА СИ

Описать структуры данных, процедуры и функции, необходимые для работы с двумя стеками. Используя генератор случайных чисел, заполнить стек Stek1, затем выполнить задание.

Тип-char
В стек Stek2 поместить гласные русские буквы из Stek1 и найти их количество.
 #include  
#include
#include
#include
#include

#define BUFFER 0x1000
#define RAND(min, max) (rand() % ((max) - (min)) + (min))

typedef struct {
size_t size;
char* buffer;
} Stack;

Stack* create(Stack* stack) {
stack = (Stack*)malloc(sizeof(Stack));
stack->buffer = (char*)calloc(BUFFER, sizeof(char));
stack->size = 0;
return stack;
}

Stack* destroy(Stack* stack) {
if (stack->buffer != NULL) {
free(stack->buffer);
stack->buffer = NULL;
free(stack);
stack = NULL;
}
return stack;
}

Stack* push(Stack* stack, char ch) {
if (stack->size < BUFFER) {
stack->buffer[stack->size] = ch;
stack->size++;
}
return stack;
}

Stack* fill_random(Stack* stack, size_t count) {
size_t i = 0;
srand((unsigned)time(NULL));
while (i < count) {
stack = push(stack, RAND('a', 'z' + 1));
++i;
}
return stack;
}

size_t size(Stack* stack) {
return stack->size;
}

char* top(Stack* stack) {
return &stack->buffer[stack->size - 1];
}

Stack* pop(Stack* stack) {
stack->size--;
return stack;
}

_Bool empty(Stack* stack) {
return stack->size == 0;
}

Stack* copy(Stack* stack1, Stack* stack2) {
stack2 = create(stack2);
stack2->size = stack1->size;
size_t i = 0;
while (i < stack1->size) {
stack2->buffer[i] = stack1->buffer[i];
++i;
}
return stack2;
}

_Bool is_vowels(char ch) {
char vowels[] = "aeiouy";
size_t i = 0;
do {
if (ch == vowels[i]) {
return true;
}
} while (++i < 6);
return false;
}

Stack* vowels(Stack* stack1, Stack* stack2) {
Stack* stack = NULL;
stack = copy(stack1, stack);
stack2 = create(stack2);
while (!empty(stack)) {
if (is_vowels(*top(stack))) {
stack2 = push(stack2, *top(stack));
}
stack = pop(stack);
}
destroy(stack);
return stack2;
}

void show_and_clear(Stack* stack) {
while (!empty(stack)) {
putchar(*top(stack));
putchar(' ');
stack = pop(stack);
}
puts("");
}

int main(void) {
Stack* stack1 = NULL;
Stack* stack2 = NULL;
size_t count = 0;
stack1 = create(stack1);
stack1 = fill_random(stack1, 26);
stack2 = vowels(stack1, stack2);
count = size(stack2);
show_and_clear(stack1);
stack1 = destroy(stack1);
show_and_clear(stack2);
stack2 = destroy(stack2);
printf("Count: %zu\n", count);
return 0;
}
КР
Кахраман Розметов
60 394
Лучший ответ