Ввести с клавиатуры число и поместить его перед тем элементом списка, который больше него - C (СИ) (79471)

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

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

Вопрос:как ввести с клавиатуры число и поместить его перед тем элементом списка, который больше него?
struct spis{
    char c;
    spis *next;
}*p,*top,*cur,*prev;
 
void push(char value);
void show(void);
 
int main(){
    top=0;
    char key,value;
    int done=false;
    while(!done)
{
    system("cls");
    show();
    printf("\nA)dd\nD)elete\nQ)uit\n");
    key=getchar();
    switch(toupper(key))
{
    case 'A':
    value=getch();
    push(value);
    break;
    case 'Q':
    done=true;
    break;
    }
}
    return 0;
}
 
void push(char value)
{
printf("\n Inpus\n");
p=new spis;
p->c=value;
p->next=NULL;
if(top==NULL) top=p;
cur=top;
prev=0;
while(cur && value>cur->c)
{
prev=cur;
cur=cur->next;
}
if(cur == NULL)prev->next=p;
else if(prev) 
{
p->next=cur;
prev->next=p;
}else
{
top=p;
top->next=top==cur?NULL:cur;
}
}   
 
void show()
{
p=top;
if(p==NULL)
printf("\nQueue is empty\n");
else
printf("\nQueue\n");
while(p)
{
    printf("%c\n",p->c);
    p=p->next;
}
}

Решение задачи: «Ввести с клавиатуры число и поместить его перед тем элементом списка, который больше него»

textual
Листинг программы
void AddOchdLeft(tochd *sp, int inf)  
{  
    tochd *spt=new tochd; 
  spt->inf = inf; 
    spt->left = sp->left; 
  spt->rigth = sp; 
  spt->left->rigth = spt; 
  sp->left = spt; 
  return; 
}

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

В данном коде реализуется функция AddOchdLeft, которая добавляет новый элемент в список, содержащий информацию об очередном числе и ссылку на элемент списка, который больше этого числа.

  1. void AddOchdLeft(tochd *sp, int inf) - объявление функции с двумя параметрами: указатель на узел списка sp и число inf.
  2. tochd *spt=new tochd; - создание нового узла списка и присвоение его указателю spt.
  3. spt->inf = inf; - присваивание числового значения новому узлу списка.
  4. spt->left = sp->left; - присвоение ссылки на левый элемент списка новому узлу списка.
  5. spt->rigth = sp; - присвоение ссылки на правый элемент списка новому узлу списка.
  6. spt->left->rigth = spt; - присвоение ссылки на новый узел списка левому элементу списка.
  7. sp->left = spt; - присвоение ссылки на новый узел списка левому элементу списка.
  8. return; - завершение функции. Следует отметить, что в данном коде не обрабатываются ошибки, которые могут возникнуть при выделении памяти под новый узел списка или при изменении ссылок на узлы списка.

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


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

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

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