SaDFromSpb
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #include <iostream> #include <fstream> using namespace std; struct list_t { int ndx; list_t* next; }; void printlist(list_t* list) { list_t* first = list; do { cout << list->ndx << " "; list = list->next; } while (list->next != first->next); cout << endl; } // Поиск элемента c номером n. // Возвращает указатель на элемент. // Если такого нет, возвращает NULL list_t* find(list_t* list, int n) { list_t* first = list; while (list->ndx != n && list->next != first) list = list->next; if (list->ndx == n) return list; else return NULL; } // возвращает false, если такого элемента нет в списке bool insert(list_t* list, int n, int x) // Вставить x после n { list_t* elem = find(list, n); if (elem == NULL) return false; list_t* pl = new list_t; pl->ndx = x; pl->next = elem->next; elem->next = pl; return true; } // возвращает false, если такого элемента нет в списке bool del(list_t* list, int n) { list_t* elem = find(list, n); if (elem == NULL) return false; list_t* nxt = elem->next; elem->ndx = nxt->ndx; elem->next = nxt->next; delete nxt; // Хотя лучше делать через нахождение предшествующего элемента, // если копировать содержание элемента дорого. return true; } int main(int argc, char* argv[]) { // Создаем первый элемент в списке, котрый ссылается сам на себя list_t plist; plist.ndx = 1; plist.next = &plist; insert(&plist, 1, 4); printlist(&plist); insert(&plist, 4, 5); printlist(&plist); del(&plist, 4); printlist(&plist); return 0; } |