Задание№2 Алгоритм: #include <stdio.h> #include <stdlib.h> #include <conio.h> typedef struct list_elem { //структура - элемент списка int date; //полe данных struct list_elem *next,*pred; //указатели адресов предыдущего и следующего элементов списка } SPK; SPK* NewElem (SPK *pnev); //функция присоединения нового элемента списка void PrintList(void); //функция вывода списка на печать void ITOG(void); //функция нахождения суммы произведений элементов SPK *list_start,*list_end; //адреса первого и последнего элементов списка int main() { clrscr(); int N; printf("\nInput size of the list: "); scanf("%d",&N); SPK *end=NULL; //указатель адреса последнего элемента printf("\nINPUT DATE:"); do{ //цикл формирования списка end=NewElem(end); if(end==NULL) break; N--; } while(N > 0); printf("\n\n\nOur List: "); PrintList(); ITOG(); getch(); return 0; } SPK* NewElem (SPK *lel) { static int num=1; //номер вводимого элемента lel=(SPK*)malloc(sizeof(SPK)); //выделение памяти для элемента списка printf("\n%d element: ",num); printf("\tInput date: "); scanf("%d",&lel->date); //ввод числа fflush(stdin); //очищение буфера ввода if(list_start==NULL) //если список пуст, то { lel->next=lel->pred=NULL; //поля адресов равны 0 list_start=list_end=lel; //элемент становится единственным в списке } else { list_end->next=lel; //указатель последнего элемента указывает на присоединяемый элемент lel->pred=list_end; //указатель присоединяемого элемента указывает на последний элемент lel->next=NULL; list_end=lel; //присоединенный элемент становится последним в списке } num++; return lel; } void PrintList() { SPK *lel=list_start; while(lel!=NULL) //пока не найден последний элемент списка { printf("%4d",lel->date); lel=lel->next; //передвигаем указатель на следующий элемент } } void ITOG(void) { SPK *lel=list_start; SPK *mel=list_end; int mltp,itog=0; while(lel!=NULL) { mltp=(lel->date)*(mel->date); //умножение элементов printf("\n\n%d * %d = %d",lel->date,mel->date,mltp); itog=itog+mltp; //суммирование произведений lel=lel->next; //идем по списку из первого элемента в последний mel=mel->pred; //идем по списку из последнего элемента в первый } printf("\n\nITOG = %d",itog); }
Ключевые слова:
структура, двунаправленные списки
|
|||