Проход по двунаправленому списку назад и вперед одновремено.

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

Алгоритм:

- Вводим натуральные числа в список используя EOF
- Используя цикл считаем произведение

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int v, S;                 
 
struct List {                     //объявляем структуру
	int data;
	List *next;
        List *prev;
}*head, *tail, *p, *p1;
 
 void add_new_List(int v) {      //создаем функцию для создания двунаправленного списка
 
       if (head==NULL ) {
           head=new List;
           head->data=v;
           head->prev=NULL;
           head->next=NULL;
           tail=head;
 
       }else{
 
           p=new List;
           p->data=v;
           p->next=NULL;
           p->prev=tail;
           tail->next=p;
           tail=p;
      }
 }
 
 int main(){
 
    head=NULL; tail=NULL; S=1;          
 
    printf("input random numbers\n");
 
    while (scanf("%d",&v)!=EOF)       //вводим значения, чтобы прекратить ввод нажимаем ctrl+z
           add_new_List(v);
 
    p=head; p1=tail;                  //ставим первую (p) метку на начало, а вторую (р1) на конец списка                  
 
    while(p!=NULL) {                  // используя цикл считаем необходимую сумму и заносим в переменную S
 
          S=(p->data+p1->data)*S;
          p=p->next;
          p1=p1->prev;
    }
 
 
    printf(" %d ", S);                 //выводим результат
 
    getch();
    return 0;
 }

Ключевые слова: 
Списки, создание новых списков
ВложениеРазмер
list 2 n2.rar2.68 кб