Сортировка стека в порядке убывания возраста работников - 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;
}

Объяснение кода листинга программы

В этом коде используется стек для сортировки массива в порядке убывания. Список действий:

  1. Создаются три структуры стека с указателями на массивы, которые будут хранить значения.
  2. В функции инициализации стеки заполняются динамическими массивами, выделенными с помощью calloc.
  3. В цикле основные значения добавляются в стек S1.
  4. В цикле, пока стек S1 не пуст, извлекается максимальное значение, которое затем добавляется в стек S2.
  5. В цикле, пока стек S1 не пуст, извлекается следующее значение, и если оно больше максимального, то оно становится новым максимальным.
  6. В цикле, пока стек S2 не пуст, извлекается значение, и если оно равно максимальному, то оно добавляется в стек S3.
  7. В цикле, пока стек S3 не пуст, извлекаются значения и выводятся на экран.
  8. После выполнения всех операций освобождаются выделенные массивы.
  9. Выполняется команда PAUSE, чтобы программа не закрылась слишком быстро.
  10. Возвращается 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5
Похожие ответы