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

Однонаправленный список не могу переделать!!! - C++

Восстановить пароль Регистрация
 
abd256
8 / 8 / 0
Регистрация: 08.01.2011
Сообщений: 9
14.01.2011, 10:31     Однонаправленный список не могу переделать!!! #1
Огромная просьба помочь с реализацией однонаправленного списка. Так то список есть НО! мне нужно чтобы он работал со строками а не с цифрами. Примерно так вывдил запрос
"Введите кол-во студентов:3
Введите Имя 1 студента:Александр
Введите группу: АУ1-09
Введите Имя 2 студента:Виталик
Введите группу: АУ2-09
Введите Имя 3 студента:Саша
Введите группу: АУ3-09

Александр АУ1-09
Виталик АУ2-09
Саша АУ3-09"

Очень прошу помогите. Я совсем запутался с этими символьными массивами как их впихивать в структуры...Надеюсь на помощ квалифицированных и знающих программистов т.е. на ВАС.
Заранее огромное спасибо ниже приведен мой код программы но только с цифрами.



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
#include <iostream.h>
#include <windows.h>
char NEWT[256];
char*RUS(char*TEXT) {
    CharToOem(TEXT,NEWT);
    return NEWT;}
 
 
struct Node
{
    int item;
    Node *next;  // указатель на следующий элемент списка
};
 
 
    Node *pHead;     // указатель на первый элемент списка
    Node *pPrev;    // указатель на последний элемент списка
    Node *pPred;        //указатель на предыдущий элемент       
    int count;      // количество элементов в списке
 
 
    void add(int item, int index);
    void print();
    Node* find(int index);
int main(void)
 
{int i,n,k;
Node*PV=new Node;
cout<<RUS("Пустой список создан...")<<endl;
 
{pHead = NULL;
count = 0;}
cout <<RUS("Ввести количество элементов: ")<< endl;
                cin>>n;
                cout <<RUS("Ввести элементы списка: ")<< endl;
                for(i = 0; i < n; i++)
                {cin>>k;
                add(k,i);}
print();
return 0;}
 
void add(int item,int index)
{
    Node *PV = new Node;
    PV->item = item;
    
    if  (pHead == NULL)
    {PV->next = NULL;
      pHead = PV;
      pPred=PV;
      count=1;}
    else 
           
    {pPred=find(index);
    PV->next=pPred->next;
    pPred->next=PV;
    count++;}          
}
void print()
         {  Node *pPV = pHead;
    if (pPV==NULL) cout<<RUS("Список пуст!")<<endl;
    
         while(pPV != NULL)
     {
        cout << pPV->item << " ";
        pPV = pPV->next;
     }
    cout << endl << count << endl;
}
 
 
Node* find(int index) 
{       
    if (index<1) return NULL;
        Node*PV=new Node;
        PV=pHead;
        for (int i=1;i<index;i++)
            PV=PV->next;
    if (PV==NULL) return NULL;
    return PV;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2011, 10:31     Однонаправленный список не могу переделать!!!
Посмотрите здесь:

однонаправленный список C++
C++ однонаправленный список
C++ однонаправленный список
C++ однонаправленный список
Однонаправленный Список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,121
Записей в блоге: 3
14.01.2011, 10:39     Однонаправленный список не могу переделать!!! #2
В принципе все будет то же самое, только со строками. Использую строки фиксированного размера.
C++
1
2
3
4
5
struct Node
{
    char item[50];
    Node *next;  // указатель на следующий элемент списка
};
Поскольку вы используете потоки для ввода/вывода вроде больше ничего менять не надо. Только не вводите больше 50 символов в строке)
abd256
8 / 8 / 0
Регистрация: 08.01.2011
Сообщений: 9
14.01.2011, 11:12  [ТС]     Однонаправленный список не могу переделать!!! #3
Прошу прошения за назойливость но как мне передать в функцию add масив я так понимаю что в main я должен объявить масиив символов и затем передовать его в функцию???

Добавлено через 26 минут
Вроде как сделал ка просили но тем неменее выскакивает ошибка:cannot convert from 'int' to 'char [50]'
There are no conversions to array types, although there are conversions to references or pointers to arrays

я так понимаю тут нужно менять массив с int на char но опять же как это все реализовать я и так и этак кручу не выходит пока
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,121
Записей в блоге: 3
14.01.2011, 11:18     Однонаправленный список не могу переделать!!! #4
Так вам нужно везде заменить
C++
1
int item
на
C++
1
char item[50]
. У вас же тип используемых данных везде должен поменяться. Сначала элементом списка было число, а теперь должна стать строка.
abd256
8 / 8 / 0
Регистрация: 08.01.2011
Сообщений: 9
14.01.2011, 12:24  [ТС]     Однонаправленный список не могу переделать!!! #5
еще раз глубоко извеняюсь но немогли бы Вы отредактировать приведенный ниже код все равно выдает ошибки
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
#include <iostream.h>
#include <windows.h>
char NEWT[256];
char*RUS(char*TEXT) {
        CharToOem(TEXT,NEWT);
        return NEWT;}
 
 
struct Node
{
    char item[50];
    Node *next;  // указатель на следующий элемент списка
};
 
    Node *pHead;     // указатель на первый элемент списка
    Node *pPrev;        // указатель на последний элемент списка
        Node *pPred;            //указатель на предыдущий элемент               
    int count;      // количество элементов в списке
    const m=50;
 
    Node* add(char *item[], int index);
    void print();
    Node* find(int index);
int main(void)
 
{int i,n;
char k[m];
Node*PV=new Node;
cout<<RUS("Пустой список создан...")<<endl;
 
{pHead = NULL;
count = 0;}
cout <<RUS("Ввести количество элементов: ")<< endl;
                                cin>>n;
                                cout <<RUS("Ввести элементы списка: ")<< endl;
                                for(i = 0; i < n; i++)
                                {cin>>k;
                                add(k,i);}
print();
return 0;}
 
Node* add(char *item[],int index)
{
    Node *PV = new Node;
        PV->item = item;
        
        if  (pHead == NULL)
        {PV->next = NULL;
          pHead = PV;
          pPred=PV;
          count=1;}
        else 
           
        {pPred=find(index);
        PV->next=pPred->next;
        pPred->next=PV;
        count++;}          
}
void print()
         {      Node *pPV = pHead;
        if (pPV==NULL) cout<<RUS("Список пуст!")<<endl;
    
         while(pPV != NULL)
     {
        cout << pPV->item << " ";
        pPV = pPV->next;
     }
    cout << endl << count << endl;
}
 
 
Node* find(int index) 
{               
        if (index<1) return NULL;
                Node*PV=new Node;
                PV=pHead;
                for (int i=1;i<index;i++)
                        PV=PV->next;
        if (PV==NULL) return NULL;
        return PV;
}
заменил везде на char но выдает следующие ошибки:
1.error C2664: 'add' : cannot convert parameter 1 from 'char [50]' to 'char *[]'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
на строке 38
2.error C2440: '=' : cannot convert from 'char *[]' to 'char [50]'
There are no conversions to array types, although there are conversions to references or pointers to arrays
Error executing cl.exe. на строке 45
некак не могу понять в чем дело вроде у массивов размерность одинаковая но почему не работает???

Добавлено через 27 минут
Все разобрался. Огромное спасибо за помощ!
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
14.01.2011, 12:34     Однонаправленный список не могу переделать!!! #6
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
#include <iostream>
#include <windows.h>
using namespace std;
 
char NEWT[256];
 
char*RUS (char*TEXT) {
    CharToOem(TEXT, NEWT);
    return NEWT;
}
 
struct Node{
    string name;
    string grup;
    Node *next;  // указатель на следующий элемент списка
    Node():next(0){}
};
struct list{
    Node *pHead;
    int count;       // количество элементов в списке
    void add(string, string);
    void print();
    Node* find(int);
    list():count(0), pHead(0){}
};
 
int main(){
    int c;
    string n, g;
    list l;
    cout<<RUS("Пустой список создан...")<<endl;
    cout <<RUS("Ввести количество элементов: ")<< endl;
    cin>>c;
    cout <<RUS("Ввести элементы списка: ")<< endl;
    for(int i = 0; i < c; i++){
        cout<<RUS("введите имя\n");
        cin>>n;
        cout<<RUS("введите группу\n");
        cin>>g;
        l.add(n, g);
    }
    l.print();
    Node *t=l.find(c-2);
    cout<<"\n"<<t->name;
}
 
void list::add(string name, string grup){
    Node *temp = new Node;
    temp->name = name;
    temp->grup = grup;
    if  (pHead == 0){
        pHead=temp;
        ++count;
    }
    else{
        Node *temp1=pHead;
        while(temp1->next!=0)
            temp1=temp1->next;
        temp1->next=temp;
        ++count;
    }
}
 
void list::print(){
    Node *pPV = pHead;
    if (pPV==0) cout<<RUS("Список пуст!")<<endl;
    while(pPV != 0){
        cout << pPV->name<<" "<<pPV->grup<<"\n";
        pPV = pPV->next;
     }
    cout<<"\n";
}
 
Node* list::find(int index){
        if (index<0||index>count-1) return NULL;
        Node*temp=pHead;
        for (int i=0;i<index;i++)
            temp=temp->next;
        return temp;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 12:47     Однонаправленный список не могу переделать!!!
Еще ссылки по теме:

C++ Однонаправленный список: переделать код под консоль
однонаправленный список C++
C++ однонаправленный список

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

Или воспользуйтесь поиском по форуму:
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 12:47     Однонаправленный список не могу переделать!!! #7
igorrr37, Молодчага! String'и РУЛЯТ!!!! Зачем пользоваться неудобнымыми указателями на char, если есть string=)
Правда есть одно но: если ввести не Александр, а Александр Петрович, то получится имя=Александр, группа=Петрович, или ещё может быть баг, описание которому не приходит мне в голову=( Лучше использовать
C++
1
getline(cin, str);
Воть так.
Yandex
Объявления
14.01.2011, 12:47     Однонаправленный список не могу переделать!!!
Ответ Создать тему
Опции темы

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