Преобразовать стек в два стека - первый должен содержать только чётные числа, второй — только нечётные - C (СИ)
Формулировка задачи:
Здравствуйте!!
Нужно создать стек в диапазоне -50 до 50.Преобразовать стек в два стека.Причем, первый должен содержать только чётные числа,второй - только нечётные.
НА СИ
ПЖЛСТ
вот код для с++
#include <cstdlib> #include <ctime> #include <iostream> #include <stack> using namespace std; int main() { unsigned i, count; cout << "Count of elements: "; cin >> count; srand((int)time(0)); stack<signed char> s1; for (i = 0; i < count; i++) s1.push(rand() % 101 - 50); stack<signed char> s2, s3; signed char c; while (!s1.empty()) { cout << int(c = s1.top()) << endl; (c & 1? s3: s2).push(c); s1.pop(); } cout << endl; while (!s2.empty()) { cout << int(s2.top()) << endl; s2.pop(); } cout << endl; while (!s3.empty()) { cout << int(s3.top()) << endl; s3.pop(); } }
Решение задачи: «Преобразовать стек в два стека - первый должен содержать только чётные числа, второй — только нечётные»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define bounded_random(l, h) ( rand() % ((h) - (l) + 1) + (l) ) typedef struct NODE { int value; struct NODE * next; } node_t; int push(node_t ** pStack, const int nValue) { node_t * pNode = malloc(sizeof(node_t)); if ( ! pNode ) return -1; pNode->value = nValue; pNode->next = *pStack; *pStack = pNode; return 0; } int pop(node_t ** pStack, int * pValue) { if ( ! *pStack ) return -1; else { node_t * pNode = (*pStack)->next; *pValue = (*pStack)->value; free(*pStack); *pStack = pNode; } return 0; } #define LOW (-50) #define HIGH (50) int main(void) { size_t count; srand(time(NULL)); while ( printf("Number of elements: ") && scanf("%u", &count) == 1 && count ) { node_t * all, * even, * odd; int curr; all = even = odd = NULL; while ( count-- ) { if ( push(&all, bounded_random(LOW, HIGH)) ) { fprintf(stderr, "Memory error!\n"); exit(1); } } printf("All:\n"); while ( ! pop(&all, &curr) ) { printf("%d ", curr); if ( curr & 1 ) { if ( push(&odd, curr) ) { fprintf(stderr, "Memory error!\n"); exit(1); } } else { if ( push(&even, curr) ) { fprintf(stderr, "Memory error!\n"); exit(1); } } } printf("\nEven:\n"); while ( ! pop(&even, &curr) ) printf("%d ", curr); printf("\nOdd:\n"); while ( ! pop(&odd, &curr) ) printf("%d ", curr); printf("\n"); } exit(0); }
Объяснение кода листинга программы
В этом коде:
- Структура
node_t
объявлена как содержащая целочисленное значение и указатель на следующий элемент в стеке. - Функция
push
добавляет новый элемент в стек. Если выделение памяти для нового элемента не удалось, функция возвращает -1. - Функция
pop
удаляет и возвращает верхний элемент стека. Если стек пуст, функция возвращает -1. - В основном блоке кода генерируется случайное число в диапазоне от -50 до 50 и добавляется в стек. Этот процесс повторяется, пока пользователь не введёт количество элементов для добавления.
- Затем программа разделяет стек на два новых стека: один для четных чисел, другой для нечетных.
- В конце программа выводит оба стека на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д