C++dummy
1

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

18.11.2011, 15:46. Показов 535. Ответов 0
Метки нет (Все метки)

Доброго времени суток. Я написал программу, просмотрите, пожалуйста.

В общем нужно реализовать класс, выполняющий следующие функции:
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 минуты
Нет, ну ребят, ну подскажите. Здесь же для вас ничего сложного.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2011, 15:46
Ответы с готовыми решениями:

Работа со списками. В чем такая глупая ошибка не могу найти?
В чем такая глупая ошибка не могу найти? program sp; type {Тип основных данных.} TElem=real;...

Скажите в чем ошибка?
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; int main() { int i=0,m,b,x;...

Скажите, пожалуйста, в чем ошибка
Вот задача. надо создать одномерный массив, значения массива вводить с клавиатуры, и прекратить...

Скажите, пожалуйста,в чем ошибка
Private Sub CommandButton1_Click() Dim x As Single, y As Single For x = 0.5 To 2.5 Step 0.5 y =...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2011, 15:46
Помогаю со студенческими работами здесь

Взгляните на код, и скажите в чём ошибка
&lt;html&gt; &lt;head&gt; &lt;title&gt;Scope Demo&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Scope Demo&lt;/h1&gt; ...

В чем ошибка, скажите пожалуйста, почему не работает?
Program m10; type MARCH = record NNP:string; // нач пункт // NKP:string; // кон...

Двумерный массив. скажите пожалуйста в чем ошибка?
введем 6 6 все получается, но почему-то вверху нули!!! Program Dwumernii_massiv; uses...

Не правильно складываеться в масив. ТОлько не пишите ответ кодом ,а скажите в чем там ошибка
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

Подскажите в чем ошибка, буду очень признательна.Использование компонентов для работы со списками
Дано целое число в диапазоне 1 – 5. Вывести строку — словесное описание соответствующей оценки (1 —...

Ошибка в программе, некорректный ввод/вывод. Работа со списками
Задание: прочитать из стандартного потока ввода список, который содержит разные элементы, в том...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru