Линейные однонаправленные списки: выяснить, имеются ли совпадающие элементы - C (СИ)
Формулировка задачи:
Всем привет помогите с задачей на языке си.
Aлгоритмов обработки динамических структур данных. Линейные однонаправленные списки
15. Даны действительные числа a1, ..., an. ( n >= 2 и заранее неизвестно). Выяснить, имеются ли среди чисел a1, ..., an совпадающие.
Как найти "Выяснить, имеются ли среди чисел a1, ..., an совпадающие."
Решение задачи: «Линейные однонаправленные списки: выяснить, имеются ли совпадающие элементы»
textual
Листинг программы
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
struct st
{struct st *pc1;
int c;
struct st *pc;
};
int main()
{ struct st *str;
struct st *beg=NULL;
struct st *end=NULL;
struct st *end1=NULL;
struct st *buf=NULL;
int min,P=0;
char pr[4];
printf("vvedite dannie structuri");
/*cikl vvoda i formirovanie spiska*/
do
{ str= new st;//(struct stud*)malloc(sizeof(struct stud));
printf("\n vvedi c=");
scanf("%d",&str->c);
/*vcluchit zveno v spisok*/
if(beg==NULL && end==NULL)
{beg=str;str->pc1=NULL;buf=str;}
else
{ end1=str;end->pc=str;
end1->pc1=buf;
}
end=str;
end->pc=NULL;buf=str;
printf("\n vvesti sled. znachenie?");
scanf("%s",pr);
if (strcmp(pr,"no")==0)
break;
}while(1);
printf("\n soderjimoe spiska:");
str=beg;min=str->c;
while(str!=NULL)
{ if(str->c<min){P=1;break;}
str=str->pc;
} printf("\n spisok\n ");
if(P==0)
{str=beg;
while(str!=NULL)
{ printf(" %d ",str->c);
str=str->pc;
}
}
else
{str=buf;
while(str!=NULL)
{
printf(" %d ",str->c);
str=str->pc1;
}
}
free(str);
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
В этом коде создается список структур с использованием динамического выделения памяти. Вводится строка, и затем в цикле до тех пор, пока не будет введено no, добавляются элементы в список. Затем список проходит в обратном порядке, и если значение элемента меньше минимального значения списка, то меняется значение минимального значения и сдвигается на единицу счетчик. После прохода по всем элементам списка, если счетчик равен нулю, то выводится список элементов в порядке их добавления, иначе выводится в обратном порядке. Код также освобождает память, выделенную под список, и вызывает систему для приостановки выполнения программы.