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

Список с указателем на последний элемент - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нахождение интеграла методом Симпсона http://www.cyberforum.ru/cpp-beginners/thread56081.html
http://i016.***********/0910/b7/f79e34604977.jpg имеется функция double Simpson(double (*Fx)(double)) { double I; double h; double x; double a,b; int m;
C++ Несколько упражнений на массивы и строки Задачи: 1) Определить положение минимального элемента из находящихся до первого отрицательного в одномерном массиве. 2) В двумерном массиве поменять местами 1 и 2 строки, 3 и 4 и т.д. 3) Заданы две строки. найти самую длинную их общую часть. По первой задаче у меня есть текст, но программа должным образом не работает. Вот текст: #include "stdafx.h" #include "iostream" http://www.cyberforum.ru/cpp-beginners/thread56079.html
C++ Что же от меня хотят? :]
только только разобрался с бинарным деревом и получил вот такое новое задание но что то не совсем понял что от меня требуется : Write a class that can be created only in a single instance and only by some specific method. For example this should work: SingleInstance *pInst = SingleInstance::getInstance(); pInst->someMethod(); And this shouldn't:
настройки студии ?? C++
какие самые оптимальные настройки студии чтобы всё паботало хорошо?
C++ Заменить все элементы массива большие чем "a" значением максимального элемента этого массива http://www.cyberforum.ru/cpp-beginners/thread56062.html
Всем драсте, в общем у меня такая же ситуация) помогите пожалуста написать програмки на массивах 1мерный масив: Заменить все элементы массива большие чем "a" значением максимального эллемента этого массива PS я её накаверкал сам только она не работает, я делал через Max "max=a if (a>max) max=a" чтобы сначало найти наибольший член а дальше сравнивать с а и тд 2я задачка "Из заданного...
C++ не работает шаблонный список Создаю список При компиляции выдает ошибки 1>Linking... 1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Spisok<int>::~Spisok<int>(void)" (??1?$Spisok@H@@QAE@XZ) referenced in function _main 1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Spisok<int>::Spisok<int>(void)" (??0?$Spisok@H@@QAE@XZ) referenced in function _main 1> fatal error... подробнее

Показать сообщение отдельно
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89

Список с указателем на последний элемент - C++

13.10.2009, 00:24. Просмотров 2225. Ответов 8
Метки (Все метки)

Приветствую.
Есть циклический односвязный список с зацикливанием через голову.

Требуется: убрать зацикливание через голову, а вместо него организовать список с указателем на последний элемент.
Так же требуется выполнить доп. задания:

-Инициализация *сделано*
-Удаление с освобождением памяти *сделано*
-Добавление\удаления в голову\хвост *сделано*
-Выдача текущего списка на экран *сделано*
-Поменять местами первый и последний узлы; *не сделано*
-Удалить узел с указанным порядковым номером; *не сделано*

Итого осталась два задания + передалать в список с указателям на последний узел. Прошу помощи) Поиск юзал

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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
итого - осталось два невыполненных, прошу помощи! поиск юзал)
 
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
struct lItem
{
    unsigned int data;  //item data
    lItem* next;  //next item
};
 
struct lList
{
    lItem* head;
    lItem* tail;
};
 
lList mList; //main list
 
//*************************************************************
/*Delete list*/
 
void deleteList( lList& oList )
{
    while( oList.head != oList.tail )  //delete all elements of the list except head
    {
        lItem* tmp;
        tmp = oList.head->next;
        delete oList.head;
        oList.head = tmp;
    }
 
    delete oList.head;  //delete head
    oList.tail = NULL;
}
 
//*************************************************************
/*Is list empty*/
 
bool isEmpty( lList& oList )
{
    return (oList.head == NULL);  //returns true if the list is empty else false
}
 
//*************************************************************
/*Initialize list*/
 
void initList( lList& oList )
{
    if( !isEmpty( oList ) )  //if list is not empty
        deleteList( oList );
 
    oList.head = NULL;  //head and tail are NULL
    oList.tail = oList.head;
}
 
//*************************************************************
/*Add element to the end of the list*/
//by default element inserts to the end of the list
//true - tail of the list; false - head of the list
 
void addElem( lList& oList, unsigned int iData, bool insEnd = true )
{
    if( isEmpty( oList ) )  //if list if empty then first element is a head
    {
        oList.head = new lItem();  //new element
        oList.head->data = iData;  //fill data
        oList.head->next = oList.tail;   //fill next element
        oList.tail = oList.head;  //tail of the list is a head, cause there is just only one element in list
        oList.tail->next = oList.head;   //next element of the tail is a head, cause we have a cycle thru head
    }else  //else if there are elements in the list
    {
        lItem* tmp;  //new element
        tmp = new lItem();
        tmp->data = iData;  //fill data of the element
        tmp->next = oList.head;
 
        if( insEnd )  //if insert to the end
        {
            oList.tail->next = tmp;  //insert element to the end of the list
            oList.tail = tmp;  //this element is the tail
        }else  //else insert to the head of the list
        {
            oList.head = tmp;
            oList.tail->next = oList.head;
        }
    }
}
 
//*************************************************************
/*Print list to the screen*/
 
void printList( lList& oList )
{
    lItem* tmp = oList.head;  //temp element
 
    do
    {
        cout << tmp->data << " ";
        tmp = tmp->next;  //go to the next element
    }while( tmp != oList.head );  //print all other elements to the screen
 
    cout << "\n";
}
 
//*************************************************************
/*Delete element from the head or the tail of the list*/
 
void delElem( lList& oList, bool delHead = false )
{
    lItem* tmp;
 
    if( delHead )
    {
        tmp = oList.head;
        oList.head = oList.head->next;
        oList.tail->next = oList.head;
        delete tmp;
    }else
    {
        tmp = oList.head;
        while( tmp->next != oList.tail )
        {
            tmp = tmp->next;
        }
 
        delete oList.tail;
        tmp->next = oList.head;
        oList.tail = tmp;
    }
}
 
//*************************************************************
/*Prints menu to the screen*/
 
void printMenu()
{
    cout << "1. Add to the head\n";
    cout << "2. Add to the tail\n";
    cout << "3. Delete element from the head\n";
    cout << "4. Delete element from the tail\n";
    cout << "5. Print list to the screen\n";
    cout << "6. Move items\n";
    cout << "7. Insert item\n";
    cout << "0. Exit\n";
    cout << "Enter your choice: ";
}
 
//*************************************************************
/*Moves elements to the new list*/
 
void moveElements()
{
    lList tList;
    //initList( tList );
    tList.head = NULL;
    tList.tail = NULL;
 
    lItem* tmp = mList.head;
 
    int c = 1;
 
    do
    {
        if( c%2 != 0 )
        {
            addElem( tList, tmp->data, true );
        }
        c++;
        tmp = tmp->next;
    }while( tmp != mList.head );
 
    printList( tList );
    deleteList( tList );
}
 
//*************************************************************
/*Add new item after selected*/
 
void insertItem( unsigned int num )
{
    lItem* tmp = mList.head;
 
    do
    {
        if( tmp->data == num )
        {
            lItem* tmp1 = new lItem;
            tmp1->data = 666;
            tmp1->next = tmp->next;
            tmp->next = tmp1;
 
            break;
        }
        tmp = tmp->next;
    }while( tmp != mList.head );
}
 
//*************************************************************
 
int main()
{
    initList( mList );  //initialize list
 
    for( int i = 0; i < 10; i++ )  //fill list with elements 0..9
        addElem( mList, i, true );
 
    unsigned int u_choice = 9;  //user choice
 
    while( u_choice != 0 )  //while choice != 9(e.g. exit)
    {
        printMenu();  //print menu to the list
        cin >> u_choice;  //wait for the user choice
        cout << "\n";
 
        switch( u_choice )
        {
            case 1:  //Add to the head
            {
                unsigned int el = 500;
                addElem( mList, el, false );
                break;
            }
            case 2:  //Add to the tail
            {
                unsigned int el = 600;
                addElem( mList, el, true );
                break;
            }
            case 3:  //Delete element from the head
            {
                delElem( mList, true );  //delete from the head of the list
                break;
            }
            case 4:  //Delete element from the tail
            {
                delElem( mList, false );  //delete from the tail of the list
                break;
            }
            case 5:  //Print list to the screen
            {
                printList( mList );
                break;
            }
            case 6:
            {
                moveElements();
                break;
            }
            case 7:
            {
                int num;
                cout << "Enter data value: ";
                cin >> num;
                insertItem( num );
            }
            case 0: break;  //Exit
        }
    }
 
    deleteList( mList );  //delete list from the memory
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru