Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Создать линейный односвязный список.
- Из списка удалить первые два нулевых элемента,
- а затем вставить заданное число перед первым положительным элементом
- и после последнего положительного элемента.
- Освободить память, занимаемую элементами списка.
- */
- #include <iostream>
- #include <Windows.h>
- using namespace std;
- struct List
- {
- int Value;
- List* pNext;
- };
- List* head;
- void Initial(List*&);
- void Output();
- void DelTwoZero(List*&);
- void AddTwoElem(List*&, int);
- void DeleteAll(List*&);
- int main()
- {
- int q;
- do
- {
- SetConsoleOutputCP(1251);
- SetConsoleCP(1251);
- Initial(head);
- Output();
- DelTwoZero(head);
- Output();
- cout << "Введите число:" << endl;
- int elem;
- cin >> elem;
- AddTwoElem(head, elem);
- Output();
- DeleteAll(head);
- cin >> q;
- cout << "0. Выход" << endl;
- } while (q != 0);
- }
- void Initial(List*& head)
- {
- head = new List;
- head->Value = 0;//head выполняет роль счётчика элементов
- List* tmp = head;
- tmp->pNext = nullptr;
- int elem;
- cout << "Введите элементы списка:" << endl;
- cin >> elem;
- while (elem != 999)
- {
- tmp->pNext = new List;
- tmp = tmp->pNext;
- tmp->Value = elem;
- head->Value++;
- tmp->pNext = nullptr;
- cin >> elem;
- }
- }
- void DelTwoZero(List*& head)
- {
- List* tmp = head->pNext;
- List* tmpPrev = head;
- int count = 0;
- while (tmp != nullptr && count < 2)
- {
- if (tmp->Value == 0)
- {
- tmpPrev->pNext = tmp->pNext;
- delete tmp;
- tmp = tmpPrev->pNext;
- head->Value--;
- count++;
- }
- else
- {
- tmp = tmp->pNext;
- tmpPrev = tmpPrev->pNext;
- }
- }
- }
- void AddTwoElem(List*& head, int elem)
- {
- List* tmp = head->pNext, *first, *last;
- first = last = nullptr;
- while (tmp != nullptr)
- {
- if (first == nullptr && tmp->Value > 0)
- {
- first = tmp;
- }
- if (tmp->Value > 0)
- {
- last = tmp;
- }
- tmp = tmp->pNext;
- }
- tmp = head->pNext;
- List* PrevFirst;
- PrevFirst = head;
- if (first != nullptr)
- {
- while (tmp != nullptr)
- {
- if (tmp->pNext == first)
- PrevFirst = tmp;
- tmp = tmp->pNext;
- }
- List* tmp2 = new List;
- List* tmp3 = new List;
- tmp3->Value = tmp2->Value = elem;
- PrevFirst->pNext = tmp2;
- tmp2->pNext = first;
- tmp3->pNext = last->pNext;
- last->pNext = tmp3;
- head->Value += 2;
- }
- }
- void Output()
- {
- List* tmp = head;
- cout << "Вывод списка:" << endl;
- for (tmp; tmp != nullptr; tmp = tmp->pNext)
- cout << tmp->Value << '\t';
- cout << endl;
- }
- void DeleteAll(List*& head)
- {
- List* tmp;
- while (head->pNext != nullptr)
- {
- tmp = head->pNext;
- head->pNext = tmp->pNext;
- delete tmp;
- head->Value--;
- }
- delete head;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement