Ввести с клавиатуры число и поместить его перед тем элементом списка, который больше него - 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, которая добавляет новый элемент в список, содержащий информацию об очередном числе и ссылку на элемент списка, который больше этого числа.
void AddOchdLeft(tochd *sp, int inf)- объявление функции с двумя параметрами: указатель на узел спискаspи числоinf.tochd *spt=new tochd;- создание нового узла списка и присвоение его указателюspt.spt->inf = inf;- присваивание числового значения новому узлу списка.spt->left = sp->left;- присвоение ссылки на левый элемент списка новому узлу списка.spt->rigth = sp;- присвоение ссылки на правый элемент списка новому узлу списка.spt->left->rigth = spt;- присвоение ссылки на новый узел списка левому элементу списка.sp->left = spt;- присвоение ссылки на новый узел списка левому элементу списка.return;- завершение функции. Следует отметить, что в данном коде не обрабатываются ошибки, которые могут возникнуть при выделении памяти под новый узел списка или при изменении ссылок на узлы списка.