Обход двунаправленного списка с двух сторон

N натуральных чисел являются элементами двунаправленного списка L. Вычислить
X1*Xn + X2*Xn-1... + Xn*X1. Задача № 1 "Двунаправленные списки" (см. "Сборник задач для начинающего программиста")

Алгоритм
1)считываем количество(N) элементов списка
2)заполняем список с клавиатуры с помощью цикла и функции для создания двунаправленного списка
3)используя цикл, подсчитываем искомую сумму
4)выводим сумму на экран

#include <stdio.h>
#include <conio.h>
 
int v, S, N, N1;
 
//объявляем структуру
struct L {
 int a;
 L *next;
 L *prev;
}*start, *last, *p, *p1;
 
void add_item(int v) {  //функция для заполнения двунаправленного списка
L *p;
 
 if (start==NULL ) {
  start=new L;
  start->a=v;
  start->prev=NULL;
  start->next=NULL;
  last=start;
 }
 else{
  p=new L;
  p->a=v;
  p->next=NULL;
  p->prev=last;
  last->next=p;
  last=p;
 }
}
 
int main(){
 printf("vvedite kolichestvo chisel\n");//пользователь вводит количество элементов в списке
 scanf("%d", &N);
 
 start=NULL; last=NULL; S=0; N1=N;
 
 printf("vvedite chisla\n");
 
 while(N>0){      //пользователь заполняет список с клавиатуры
  scanf("%d",&v); 
  add_item(v);
  N--;}
 
 p=start; p1=last; //устанавливаем указатели на начало и конец списка соответственно
 
 while(N1>0) {     //цикл подсчитывает искомую сумму  
  S+=(p->a*p1->a);
  p=p->next;
  p1=p1->prev;
  N1--;
 }
 printf(" %d \n", S);//вывод результата на экран
 
 getch();
 return 0;
}

Ключевые слова: 
списки, двунаправленные списки
ВложениеРазмер
LIST2.rar9.62 кб