Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Лаб. работа №3 - В таблице А размера N за один просмотр необходимо
- каждый элемент заменить на ближайший следующий за ним элемент, который больше его.
- Если такого элемента нет, то заменить его на ноль.*/
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include "replace.h"
- #define CHECK(x) if(x) { printf("ERROR %d\n", __LINE__); exit(EXIT_FAILURE); }
- int main(int argc, int *argv[])
- {
- STACK stack, ans;
- int size, i, n, *val;
- i = 0;
- n = 0;
- printf("Please enter the size of array\n");
- scanf("%d", &size);
- if (!(val = (int*)malloc(size * sizeof(int))))
- {
- printf("ERROR\n");
- exit(EXIT_FAILURE);
- }
- CHECK(create(&stack, size));
- CHECK(create(&ans, size));
- printf("How many numbers do you want to enter?\n");
- scanf("%d", &n);
- CHECK(n > size);
- printf("Enter numbers\n");
- for (i = 0; i < n; i++)
- {
- scanf("%d", &val[i]);
- if (i > 0) {
- int tmp;
- CHECK(pop(&stack, &tmp));
- if (val[tmp] < val[i])
- tmp = i;
- CHECK(push(&stack, tmp));
- }
- CHECK(push(&stack, i));
- }
- for (i = 0; i < n; i++)
- {
- int tmp;
- CHECK(pop(&stack, &tmp));
- if (n - i - 1 == tmp)
- tmp = 0;
- else
- tmp = val[tmp];
- CHECK(push(&ans, tmp));
- }
- for (int i = 0; i < n; i++)
- {
- int tmp;
- CHECK(pop(&ans, &tmp));
- printf("%d ", tmp);
- }
- free(val);
- destroy(&stack);
- destroy(&ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement