Форум программистов, компьютерный форум CyberForum.ru

Двунаправленный линейный список - C++

Восстановить пароль Регистрация
 
Bishoper
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
14.09.2013, 20:39     Двунаправленный линейный список #1
Нужно сделать из двунаправленного линейного списка, циклический и найти ср. аримфетическое. Мои попытки сделать двунаправленный циклический список не увенчались успехом.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
const int n=5;//кол-во элементов
struct List//структура
{int data;
List *next,*prev;};
 
int main()
{
List *p,*root,*q,*fin;//создание указателей
int i,k;
float mean,Summ;
printf("Vvedite mass iz %i elementov\n",n);
root=new List;//создание первого элемента
scanf("%i",&root->data);
root->next=NULL;
root->prev=NULL;
fin=root;
for(i=1;i<n;i++)//создание остальных элементов
{
q=new List;
scanf("%i",&q->data);//считывание с клавы
q->next=NULL;
q->prev=fin;
fin->next=q;
fin=q;}
 
printf("\npolutch massiv\n");//полученный массив
q=root;//начало просмотра полученного массива
while(q!=NULL)
{
printf("%i ",q->data);
q=q->next;
}
Summ=0;
k=0;
q=root;//просто идем по списку
while(q!=NULL)
{
Summ+=q->data;//и складываем в нем все элементы
k++;//одновременно с этим считаем сколько у нас элементов
q=q->next;
}
//когда все заканчивается
mean=Summ/k;//делим нашу сумму на кол-во насчитанных элементов
 
printf("\n");
printf(" Summa el-ov=%.2f\n kol-vo el-ov=%i\n Sr.ar.= %.2f",Summ,k,mean);
printf("\n");
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 20:39     Двунаправленный линейный список
Посмотрите здесь:

Двунаправленный список C++
C++ Двунаправленный линейный список
C++ Линейный двунаправленный список
Двунаправленный список C++
C++ Создать линейный двунаправленный список, упрорядоченный по убыванию
C++ Двунаправленный линейный список строк

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
14.09.2013, 21:26     Двунаправленный линейный список #2
Всё просто на самом деле:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
const int n=5;//кол-во элементов
struct List//структура
{int data;
List *next,*prev;};
 
int main()
{
List *p,*root,*q,*fin;//создание указателей
int i,k;
float mean,Summ;
printf("Vvedite mass iz %i elementov\n",n);
root=new List;//создание первого элемента
scanf("%i",&root->data);
root->next=NULL;
root->prev=NULL;
fin=root;
for(i=1;i<n;i++)//создание остальных элементов
{
q=new List;
scanf("%i",&q->data);//считывание с клавы
q->next=NULL;
q->prev=fin;
fin->next=q;
fin=q;}
 
printf("\npolutch massiv\n");//полученный массив
q=root;//начало просмотра полученного массива
while(q!=NULL)
{
printf("%i ",q->data);
q=q->next;
}
Summ=0;
k=0;
q=root;//просто идем по списку
while(q!=NULL)
{
Summ+=q->data;//и складываем в нем все элементы
k++;//одновременно с этим считаем сколько у нас элементов
q=q->next;
}
//когда все заканчивается
mean=Summ/k;//делим нашу сумму на кол-во насчитанных элементов
 
printf("\n");
printf(" Summa el-ov=%.2f\n kol-vo el-ov=%i\n Sr.ar.= %.2f",Summ,k,mean);
printf("\n");
 
                                   
                                   
                                   //+++++
                                   //+++++
                                   //+++++
                                   //+++++
 
//Тут всё просто. Надо чтобы поле prev последнего элемента списка
//содержало адрес последнего элемента и чтобы поле next последнего
//элемента содержало адрес первого элемента
 
    q=root;//просто идем по списку
    while(q!=NULL)
    {
        //коль скоро у нас есть укащзатель p надо его использовать; хотя могли бы привязаться 
        //к числу n и сделать цикл из n итераций
        p= q;
        q= q->next;
    }
 
//сейчас p содержит адрес последнего элемента
    p->next= root;
    root->prev= p;
    
    //Просмотр 13 (в принципе можно сколько угодно) раз:
    q=root;
    for (int i= 0; i< 13; i++) {
        printf("%d\n", q-> data);
        q= q->next;
    }           
 
                                   //+++++
                                   //+++++
                                   //+++++
                                   //+++++
 
 
 
system("pause");
return 0;
}
Yandex
Объявления
14.09.2013, 21:26     Двунаправленный линейный список
Ответ Создать тему
Опции темы

Текущее время: 12:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru