Сортировка стека в порядке убывания возраста работников - C (СИ)
Формулировка задачи:
Ребят, помогите, пожалуйста, создать стек с информацией о работниках фирмы и потом отсортировать его в порядке убывания возраста работников
Решение задачи: «Сортировка стека в порядке убывания возраста работников»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- struct Stack
- {
- int *A;
- int p;
- };
- struct Stack S1;
- struct Stack S2;
- struct Stack S3;
- void Init()
- {
- S1.A=(int *) calloc(100,sizeof(int));
- S2.A=(int *) calloc(100,sizeof(int));
- S3.A=(int *) calloc(100,sizeof(int));
- S1.p=0;
- S2.p=0;
- S3.p=0;
- }
- void push(struct Stack *S, int v)
- {
- (*S).A[(*S).p++]=v;
- }
- int pop(struct Stack *S)
- {
- return (*S).A[--(*S).p];
- }
- int isEmpty(struct Stack *S)
- {
- return ((*S).p==0);
- }
- int main(int argc, char *argv[])
- {
- int Arr[]={1,1,3,4,1,9,12,-7,2,-6,-2,7};
- int i,k,max,v;
- Init();
- for (i=0; i<sizeof(Arr)/sizeof(int); i++) push(&S1,Arr[i]);
- while (! isEmpty(&S1))
- {
- max=pop(&S1);
- push(&S2,max);
- while (! isEmpty(&S1))
- {
- v=pop(&S1);
- if (v > max) max=v;
- push(&S2,v);
- }
- while (! isEmpty(&S2))
- {
- v=pop(&S2);
- if (v==max)
- push(&S3,v);
- else
- push(&S1,v);
- }
- }
- while (! isEmpty(&S3))
- {
- printf("%d ",pop(&S3));
- }
- free(S1.A);
- free(S2.A);
- free(S3.A);
- system("PAUSE");
- return 0;
- }
Объяснение кода листинга программы
В этом коде используется стек для сортировки массива в порядке убывания. Список действий:
- Создаются три структуры стека с указателями на массивы, которые будут хранить значения.
- В функции инициализации стеки заполняются динамическими массивами, выделенными с помощью calloc.
- В цикле основные значения добавляются в стек S1.
- В цикле, пока стек S1 не пуст, извлекается максимальное значение, которое затем добавляется в стек S2.
- В цикле, пока стек S1 не пуст, извлекается следующее значение, и если оно больше максимального, то оно становится новым максимальным.
- В цикле, пока стек S2 не пуст, извлекается значение, и если оно равно максимальному, то оно добавляется в стек S3.
- В цикле, пока стек S3 не пуст, извлекаются значения и выводятся на экран.
- После выполнения всех операций освобождаются выделенные массивы.
- Выполняется команда PAUSE, чтобы программа не закрылась слишком быстро.
- Возвращается 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д