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

Связные списки: вернуть в виде целого числа позицию name из списка - C++

Восстановить пароль Регистрация
 
Xoniks
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
19.06.2014, 10:18     Связные списки: вернуть в виде целого числа позицию name из списка #1
Помогите сделать функцию, которая возвращает в виде целого числа позицию name из списка
Функция которая меняет местами, 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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <Windows.h>
#include <iostream>
 
using namespace std;
 
struct dino {
    char name[36];
    dino* next;
    dino* prev;
};
 
 
 
 
 
 
void search (dino* first)
{
    char name[36];
    int i=1;
    if(first==NULL){cout<<"Clean\n"; Sleep(1000); return;}
    cout<<"Name forgoten dinosaur: >";
    cin>>name;
    do  {if(strcmp(name,first->name))
            {cout<<i+1<<"-th number with list\n"; Sleep(1000); return;}
        else {
                i++;
                first=first->next;
             }
        }while(first->next);
    cout<<"Sorry... List don't have this Dino\n";Sleep(1000);
    return;
}
void adding(dino* &first){
    system ("CLS");
    dino *p=new dino;
    cout<<"\nEnter Dinosaur name: ";
    cin>>p->name;
    p->next=first;
    first=p;
}
void deleting(dino* &first)
 {
    if(first==NULL){cout<<"Clean ()_()\n"; Sleep(300); return;}
    if(first->next==NULL){
        delete first;
        first=NULL;
        return;
    }
    dino* tmp=first;
    while(tmp->next->next){
        tmp=tmp->next;
    }
    delete tmp->next;
    tmp->next=NULL;
    return;
}
void delling(dino* &first)
{
    if(first==NULL){cout<<"Clean()_()\n"; Sleep(200); return;}
    if(first->next==NULL){
        delete first;
        first=NULL;
        return;
    }
    system ("CLS");
while(first->next)
    deleting(first);
    deleting(first);
    return;
}
 
 void show(dino* first)
 { if(first==NULL){cout<<"Clean!!!\n"; Sleep(200); return;}
    system ("CLS");
 
    if(first->next==0) {cout<<endl<<first->name;  Sleep(4000); return;}
    else {while(first->next)
        {
            cout<<endl<<first->name;
            first=first->next;
        }}
    if(first->next==0) cout<<endl<<first->name;
    cout<<endl;
    system("pause");
 }
 int main()
{
    dino* first=NULL;
    int sw;
    while(1)
    {
        system ("CLS");
        cout<<"1. Enter new Dinosaur\n"<<"2. Delete Dinosaur\n";
        cout<<"3. Search"<<endl<<"4. Clean"<<endl<<"5. Show list"<<endl<<"6. Bubble sort\n"<<"0. Exit"<<endl<<endl<<"....Select please...\n>";
        cin>>sw;
        switch(sw)
        {
            case 1: adding(first); break;
            case 2: deleting(first); break;
            case 3: search(first); break;
            case 4: delling(first); break;
            case 5: show(first);break;
            case 0: return 0; break;
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2014, 10:18     Связные списки: вернуть в виде целого числа позицию name из списка
Посмотрите здесь:

Связные списки C++
C++ Связные списки
C++ Связные списки
Связные списки C++
C++ Связные списки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
19.06.2014, 10:51     Связные списки: вернуть в виде целого числа позицию name из списка #2
Цитата Сообщение от Xoniks Посмотреть сообщение
Помогите сделать функцию, которая возвращает в виде целого числа позицию name из списка
Функция которая меняет местами, 2 элемента списка
для начала добавьте индексацию в структуру и итерируйте её в adding() , потом всё просто - проходим по списку до определённого индекса
Xoniks
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
19.06.2014, 11:50  [ТС]     Связные списки: вернуть в виде целого числа позицию name из списка #3
Ладно с индексацией разобрался.. а как например.. если список двусвязный и надо поменять местами 2 элемента, если они рядом, то нужно поменять 4 указателя, если через несколько элементов, то 16 указателей, как это реализовать?

Добавлено через 2 минуты
у меня есть идея.. бить список на 2 части.. и элементы которые надо поменять местами, сначала, первый раз делим на 2 части, добавляем в конец, и склеиваем, потом второй раз делим на 2 части, и вырезаем элемент, потом вставляем его
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
19.06.2014, 13:29     Связные списки: вернуть в виде целого числа позицию name из списка #4
Цитата Сообщение от Xoniks Посмотреть сообщение
Ладно с индексацией разобрался.. а как например.. если список двусвязный и надо поменять местами 2 элемента, если они рядом, то нужно поменять 4 указателя, если через несколько элементов, то 16 указателей, как это реализовать?
зачем менять связи? меняйте содержание ...
Xoniks
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
19.06.2014, 13:45  [ТС]     Связные списки: вернуть в виде целого числа позицию name из списка #5
препод сказал, что менять содержание это очень сильно бьет по производительности, потому что узлы в списках могут содержать огромное количество данных, и нужно через связи сделать сортировки..
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
19.06.2014, 14:36     Связные списки: вернуть в виде целого числа позицию name из списка #6
Цитата Сообщение от Xoniks Посмотреть сообщение
препод сказал, что менять содержание это очень сильно бьет по производительности, потому что узлы в списках могут содержать огромное количество данных, и нужно через связи сделать сортировки..
есть такое дело, ох уж эти преподы, ну тогда да, менять узлы (правда почему 16?)

o1<->o2<->o3
в o2 2 узла last и next, в o1 next , в о3 last - 4 узла, и в др соответственно 4 узла
Xoniks
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
19.06.2014, 14:55  [ТС]     Связные списки: вернуть в виде целого числа позицию name из списка #7
o1<->o2<->o3<->o4<->o5 (меняю о2 с o4) 16 выходит связей менять
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
19.06.2014, 15:00     Связные списки: вернуть в виде целого числа позицию name из списка #8
Цитата Сообщение от Xoniks Посмотреть сообщение
o1<->o2<->o3<->o4<->o5 (меняю о2 с o4) 16 выходит связей менять
у вас тут 5 элементов, в каждом из которых по 2 узла, их всего 10 , мб я вас не правильно понимаю ....
Xoniks
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
19.06.2014, 15:38  [ТС]     Связные списки: вернуть в виде целого числа позицию name из списка #9
ну вот o2 на него указывает o1 и o3 а он на них аналогично o4 с o3, o5, получается 8 указателей, отрываем, и 8 добавляем, может я не правильно думаю...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 15:43     Связные списки: вернуть в виде целого числа позицию name из списка
Еще ссылки по теме:

Связные списки C++
C++ Связные списки
C++ однонаправленные связные списки

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
19.06.2014, 15:43     Связные списки: вернуть в виде целого числа позицию name из списка #10
Yandex
Объявления
19.06.2014, 15:43     Связные списки: вернуть в виде целого числа позицию name из списка
Ответ Создать тему
Опции темы

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