Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
12 / 12 / 0
Регистрация: 08.01.2011
Сообщений: 9
1

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

14.01.2011, 10:31. Показов 710. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Огромная просьба помочь с реализацией однонаправленного списка. Так то список есть НО! мне нужно чтобы он работал со строками а не с цифрами. Примерно так вывдил запрос
"Введите кол-во студентов: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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2011, 10:31
Ответы с готовыми решениями:

Циклический двунаправленный список переделать в однонаправленный
Не могу никак из циклического двунаправленного переделать в однонаправленный список....

Однонаправленный список: переделать код под консоль
Имеется три файла, помогите пожалуйста, мне нужно эту задачу реализовать в Консольном приложении в...

Сформировать новый линейный список однонаправленный список, содержащий только нечетные элементы
Даны 2 линейных однонаправленных списка с элементами целого типа. Количество элементов и их...

Добавить в список элемент после элемента с заданным инф.полем [Однонаправленный список]
Вообщем есть: Функция создание списка Функции вывода на экран Функция добавление элемента с...

6
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
14.01.2011, 10:39 2
В принципе все будет то же самое, только со строками. Использую строки фиксированного размера.
C++
1
2
3
4
5
struct Node
{
    char item[50];
    Node *next;  // указатель на следующий элемент списка
};
Поскольку вы используете потоки для ввода/вывода вроде больше ничего менять не надо. Только не вводите больше 50 символов в строке)
1
12 / 12 / 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 но опять же как это все реализовать я и так и этак кручу не выходит пока
0
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
14.01.2011, 11:18 4
Так вам нужно везде заменить
C++
1
int item
на
C++
1
char item[50]
. У вас же тип используемых данных везде должен поменяться. Сначала элементом списка было число, а теперь должна стать строка.
1
12 / 12 / 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 минут
Все разобрался. Огромное спасибо за помощ!
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
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;
}
0
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 12:47 7
igorrr37, Молодчага! String'и РУЛЯТ!!!! Зачем пользоваться неудобнымыми указателями на char, если есть string=)
Правда есть одно но: если ввести не Александр, а Александр Петрович, то получится имя=Александр, группа=Петрович, или ещё может быть баг, описание которому не приходит мне в голову=( Лучше использовать
C++
1
getline(cin, str);
Воть так.
1
14.01.2011, 12:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2011, 12:47
Помогаю со студенческими работами здесь

Опишите и постройте через двумерный массив Sps линейный однонаправленный список из семи целых чисел и сделайте этот список пустым
Сама задача: Опишите и постройте с помощью двумерного массива Sps линейный однонаправленный список...

Однонаправленный список
Готовлюсь к экзамену по программированию, столкнулась с вопросами, которые мы не проходили, и в...

Однонаправленный список
Организовать ввод в однонаправленный список. Узел списка состоит из двух полей: целое число и...

однонаправленный список
чем отличаеться point *p; p=new(point); от p=new point; ???


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru