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

Работа со списками (через класс). Скажите, в чем ошибка. - C++

Восстановить пароль Регистрация
 
C++dummy
Сообщений: n/a
18.11.2011, 15:46     Работа со списками (через класс). Скажите, в чем ошибка. #1
Доброго времени суток. Я написал программу, просмотрите, пожалуйста.

В общем нужно реализовать класс, выполняющий следующие функции:
1. Добавление элемента в начало списка
2. Добавление элемента в конец списка
3. Включение элемента в середину списка, после элемента с определенным
идентификатором
4. Удаление элемента по его идентификатору
5. Замена двух соседних элементов списка.
6. Вывод списка на экран.

Вроде алгоритмы, по логике, верные, но в итоге получается какой-то бред. И еще без первой строки в коде не работает strcpy в MyList1::insert. Я знаю, что есть более простые пути, но нужно создать класс без использования существующих библиотек.

Заранее благодарю за помощь.

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#define _CRT_SECURE_NO_WARNINGS
 
#include "stdafx.h"
#include "iostream"
using namespace std;
 
struct Elem{
    int id;
    char *inf2;
    int count;
    int search;
    Elem *next;
};
class MyList1{
public:
    bool printList(Elem* first);
    void addFirst(Elem* &first, int id, char *inf2);
    void addLast(Elem* &last, int id, char *inf2);
    bool insert(Elem* first, int search, int count, char* name);
    bool del(Elem* first, int search);
    bool swap (Elem* &first, int search);
};
bool MyList1::printList(Elem* first){
    Elem* cur=first;
    if (first==NULL) return false;
    else
    while (cur!=NULL){
        cout << cur->id << "\t" << cur->inf2 << "\n";
        cur=cur->next;
    }
    return true;
}
void MyList1::addFirst(Elem* &first, int id, char *inf2){
    if (first==NULL){
        first=new Elem;
        first->next=NULL;
        first->id=id; 
        first->inf2=inf2;
        return;}
    Elem* n=new Elem;
    n->next=first;
    first=n;
    first->id=id;
    first->inf2=inf2;
    return;
}
void MyList1::addLast(Elem* &last, int id, char *inf2){
    if (last==NULL){
        last=new Elem;
        last->next=NULL;
        last->id=id; 
        last->inf2=inf2;
        return;
    }
    Elem* n=new Elem;
    last->next=n;
    last=n;
    last->id=id;
    last->inf2=inf2;
    last->next=NULL;
    return;
}
bool MyList1::insert (Elem* first, int search, int count, char* inf2){
    if(first==NULL)
        return false;
    Elem* cur=first;
    while ((cur->next!=NULL)&&(cur->count!=search)){
        cur=cur->next;
    }
    Elem* n=new Elem;
    n->count=count;
    n->inf2=new char[strlen(inf2)+1];
    strcpy(n->inf2, inf2);
    if (cur->count==search){
        n->next=cur->next;
        cur->next=n;
        return true;
    }
    return false;
}
bool MyList1::del(Elem* first, int search){
    if (first=NULL)
        return false;
    if(first->count==search){
        Elem* cur=first;
        first=first->next;
        delete[] cur->inf2;
        delete[]cur;
        return true;
    }
    Elem* cur=first;
    while ((cur->next!=NULL)&&(cur->next->count!=search)){
        cur=cur->next;
    }
    if ((cur->next!=NULL)&&(cur->next->count==search)){
        Elem* q=cur->next;
        cur->next=q->next;
        delete[] q->inf2;
        delete[] q;
        return true;
    }
    return false;
}
bool MyList1::swap (Elem* &first, int search){
    if(first==NULL) return false;
    Elem* last=NULL;
    while (last->next!=NULL){
        last=last->next;
    }
    if(first->count==search){
        if(first->next==NULL) return false;
        Elem* a=first;
        Elem* b=first->next;
        a->next=b->next;
        last->next=b;
        b->next=a;
        first=b;
        return true;
    }
    Elem* cur=first;
    while ((cur->next!=NULL)&&(cur->next->count!=search)){
        cur=cur->next;
    }
    if ((cur->next!=NULL)&&(cur->next->count==search)){
        Elem* a=cur->next;
        Elem* b=a->next;
        a->next=b->next;
        cur->next=b;
        b->next=a;
        return true;
    }
    return false;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    Elem *first;
    first=NULL;
    MyList1 myList1;
    myList1.addLast(first, 5, "name_50");
    myList1.addFirst(first, 3, "name_30");
    myList1.addLast(first, 7, "name_70");
    myList1.addLast(first, 9, "name_90");
    myList1.insert(first, 5, 6, "name_60");
    myList1.addFirst(first, 1, "name_10");
    myList1.insert(first, 1, 2, "name_20");
    myList1.swap(first,1);
    myList1.printList(first);
    return 0;
}
P.S. У меня складывается ощущение, что косяк кроется где-то в слове first =).

Добавлено через 11 часов 24 минуты
Нет, ну ребят, ну подскажите. Здесь же для вас ничего сложного.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 15:46     Работа со списками (через класс). Скажите, в чем ошибка.
Посмотрите здесь:

Скажите в чем ошибся! C++
Производный класс! Не могу понять в чем ошибка!! C++
C++ Скажите в чем разница?? (Ассемблеровские вставки C++)
Скажите пожалуста чем отличается массив целого числа от массива строк? C++
C++ Работа с файлом через класс
нужно описать класс Студент? подскажите в чем ошибка? C++
C++ Не правильно складываеться в масив. ТОлько не пишите ответ кодом ,а скажите в чем там ошибка
C++ Работа с файлами, не могу понять в чем ошибка

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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