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

Записать в список N действительных чисел. Перенести 3-й элемент в начало списка. (Простые списки. Задача №1)(см. "Сборник задач для начинающего программиста")

Алгоритм:
1)задаём функцию для заполнения списка
2)задаём функцию, которая переносит n-ый элемент в начало списка
3)считываем количество элементов в списке
4)заполняем список с клавиатуры с помощью цикла и функции для заполнения массива
5)выводим на экран исходный список
6)вызываем функцию, которая переносит n-ый элемент в начало списка, для n=3
7)выводим результирующий список

#include<stdio.h>
#include<conio.h>
 
int N, N1, N2;
double b;
struct Titem {   //объявление структуры
 double a;
 Titem *next;
} *start, *last, *p;
 
void add_item(double v) {    //функция для заполнения списка
 Titem *p;
 if (start==NULL){
  start=new Titem;
  start->a= v;
  start->next= NULL;
  last=start;
 }
 else {
  p=new Titem;
  p->a= v;
  p->next= NULL;
  last->next=p;
  last=p;
 }
}
 
void exch(int n){  //функция для перенесения n-ого элемента в начало списка
 Titem *p2, *p1;
 int w=n;
 p=start;
 while (n-1>0){
  p=p->next;
  n=n-1;
 }
 p1=p->next;
 p2=start;
 while (w-2>0){
  p2=p2->next;
  w--;
 }
 p2->next=p1;
 p->next=start;
 start=p;
}
 
int main(){
 printf("vvedite kolichestvo elementov\n") ; //введение пользователем количества элементов в списке
 scanf("%d", &N);
 
 
 N2=N1=N;
 
 printf("vvedite chisla\n") ; //заполнение массива с клавиатуры
 
 while (N>0) {
  scanf("%lf", &b);
  add_item(b);
  N=N-1;
 }
 
 p=start;
 
 printf("ishodnyj spisok\n") ; //вывод исходного списка при помощи цикда
 
 while (N2>0) {
  printf("%lf ", p->a);
  p=p->next;
  N2-- ;
 }
 
 printf("\n") ;
 
 exch(3);
 
 printf("rezul'tiruyushijj spisok\n") ;//вывод результирующего списка при помощи цикда
 
 
 while(N1>0){
  printf("%lf ", p->a);
  p=p->next;
  N1--;
 }
 printf("\n") ;
 
 getch();
 return 0;
}

Ключевые слова: 
список, перенос элемента
ВложениеРазмер
LIST1.rar20.62 кб