Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
abd256
8 / 8 / 0
Регистрация: 08.01.2011
Сообщений: 9
#1

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

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

Огромная просьба помочь с реализацией однонаправленного списка. Так то список есть НО! мне нужно чтобы он работал со строками а не с цифрами. Примерно так вывдил запрос
"Введите кол-во студентов: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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2011, 10:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Однонаправленный список не могу переделать!!! (C++):

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

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

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

Однонаправленный Список - C++
Как написать ф-ю добавления в конец элемента в однонаправленном списке?

однонаправленный список - C++
попалась веселая задачка. &quot;построить функцию преобразующую заданный однонаправленный список в аналогичный список где элементты...

однонаправленный список - C++
Помогиде дописать программу. Формируется однонаправленный список, заполняется (int). теперь надо как то передрать его и удалить все...

6
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
14.01.2011, 10:39 #2
В принципе все будет то же самое, только со строками. Использую строки фиксированного размера.
C++
1
2
3
4
5
struct Node
{
    char item[50];
    Node *next;  // указатель на следующий элемент списка
};
Поскольку вы используете потоки для ввода/вывода вроде больше ничего менять не надо. Только не вводите больше 50 символов в строке)
1
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 но опять же как это все реализовать я и так и этак кручу не выходит пока
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
14.01.2011, 11:18 #4
Так вам нужно везде заменить
C++
1
int item
на
C++
1
char item[50]
. У вас же тип используемых данных везде должен поменяться. Сначала элементом списка было число, а теперь должна стать строка.
1
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 минут
Все разобрался. Огромное спасибо за помощ!
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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;
}
0
knofl
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 12:47
Привет! Вот еще темы с ответами:

однонаправленный список - C++
Прошу помощи: 1.Написать функцию для создания списка. Функция может создавать пустой список, а затем добавлять в него элементы. ...

Однонаправленный список - C++
Есть задание - перегрузка операций. Дается 3 штуки Однонаправленный список с элементами типа char доступ к элементу в...

Однонаправленный список - C++
Создать однонаправленную очередь с числами в диапазоне от –50 до +50. Удалить из очереди каждый второй элемент.В конце работы все очереди...

Однонаправленный список - C++
Доброго времени суток! Помогите поправить программу(Однонаправленный список, удалить все положительные элементы кроме последнего). ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru