Сортировка стека в порядке убывания возраста работников - 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, чтобы указать, что программа успешно завершилась.