Сортировка стека методом пузырька - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет всем. Народ помогите плиз! Есть программа "сортировка стека" а в конце есть блок где написана сортировка "методом перестановки". Помогите плиз изменить его на "метод пузырька"
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
#define STACK struct stack
STACK {int body;
       STACK*next;};
void PUSH(STACK**st);
void ST_LIST(STACK*st);
int POP(STACK**st);
void ST_SORT(STACK**st);
main()
{STACK*st=NULL, *new_st, *old_st, *tmp_st;
 int new_body, old_body, choice, tmp_body, ch;
 do{
    printf("\n Action menu:");
    printf("\n1 - PUSH");
    printf("\n2 - POP");
    printf("\n3 - LIST");
    printf("\n4 - SORT");
    printf("\n5 - OUT");
    printf("\nInput Choice=");
    scanf("%d", &choice);
    switch(choice)
    {case 1: {PUSH(&st); break;};
     case 2:{old_body=POP(&st);
             printf("\n Body from STACK: %d", old_body);
             getch(); break;};
     case 3: {ST_LIST(st); getch(); break;};
     case 4: {ST_SORT(&st); getch(); break;};
     }}
 while(choice!=5);
      }
    
    void PUSH(STACK**st)  
    {int new_body;
     STACK*new_st=(STACK*)malloc(sizeof(STACK));
     if(new_st!=NULL)
     {printf("\nInput INT in Stack=");
      scanf("%d", &new_body);
      new_st->body=new_body;
      new_st->next=*st;
      *st=new_st;
      } printf("%d", new_body);
     }
     
     int POP(STACK**st)
      {int old_body=32766;
      STACK*old_st;
      if(*st==NULL)
        {printf("\n Stack is EMPTY");}
        else{old_st=*st;
       old_body=old_st->body;      
       *st=(*st)->next;
       free(old_st);}
      return old_body;}
      
     void ST_LIST(STACK*st)
     {STACK*tmp_st;
     int ch;
     if(st==NULL)
     {printf("\n Stack is EMPTY");}
     else{tmp_st=st;
           ch=0;
           printf("\n Order Value");
           while(tmp_st!=NULL)
           {ch=ch+1;
            printf("\n %d : %d", ch, tmp_st->body);
            tmp_st=tmp_st->next;
                              }               
          }
      }

      void ST_SORT(STACK**st)
      {STACK*st1;
       STACK*st2;
       int tmp;
       if(*st==NULL)
        {printf("\n Stack is EMPTY");}
        else{
             st1=*st;
             do{st2=st1->next;
              while(st2!=NULL){
                               if(st1->body>st2->body)
                  {tmp=st1->body;
                  st1->body=st2->body;
                  st2->body=tmp;}
                  st2=st2->next;
                  }
            st1=st1->next;
              }while(st1!=NULL);}
            }

Решение задачи: «Сортировка стека методом пузырька»

textual
Листинг программы
void ST_SORT(STACK**st)
      {STACK*st1;
       STACK*st2;
       int tmp;
       if(*st==NULL)
        {printf("\n Stack is EMPTY");}
        else{
             st1=*st;
             do{st2=st1->next;
              while(st2!=NULL){
                               if(st1->body>st2->body)
                  {tmp=st1->body;
                  st1->body=st2->body;
                  st2->body=tmp;}
                  st2=st2->next;
                  }
            st1=st1->next;
              }while(st1!=NULL);}

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

  1. Входные данные: указатель на вершину стека *st.
  2. Проверка: если стек пуст, выводится сообщение об этом.
  3. Указатель на вершину стека st1 инициализируется значением *st.
  4. В цикле do-while происходит рекурсивный вызов функции ST_SORT для всех элементов стека, начиная с st1.
  5. Для каждого вызова функции ST_SORT инициализируется временная переменная st2 значением st1->next.
  6. В цикле while для каждого следующего элемента стека проверяется, больше ли он текущего элемента st1.
  7. Если текущий элемент st1 больше следующего элемента, выполняется обмен значениями между ними с использованием временной переменной tmp.
  8. После цикла while для каждого вызова функции ST_SORT выполняется переход к следующему элементу стека st1=st1->next.
  9. После завершения цикла do-while выполняется переход к следующему элементу стека st1=st1->next.
  10. Результат: отсортированный стек.

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


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

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

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