Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <locale>
- #include <stdlib.h>
- #include <time.h>
- using namespace std;
- // Стэк. Тип поля - char* . Добавить в список элемент после элемента с заданным информационным полем.
- struct point{
- char* data = new char[10];
- point* next;
- };
- void print_list(point* beg)
- //печать списка
- {
- point* p = beg;//начало списка
- while (p != 0)
- {
- cout << p->data << "\t";
- p = p->next;//переход к следующему элементу
- }
- }
- point* make_list(int n)
- {
- point*beg;//указатель на первый элемент
- point*p, *r;//вспомогательные указатели
- beg = new(point);//выделяем память под первый элемент
- cout << "Число ?" << endl;
- cin >> beg->data;//вводим значение информационного поля
- beg->next = 0;//обнуляем адресное поле
- //ставим на этот элемент указатель p (последний элемент)
- p = beg;
- for (int i = 0; i<n - 1; i++)
- {
- r = new(point);//создаем новый элемент
- cout << "Число ?" << endl;
- cin >> r->data;
- r->next = p; //связываем p и r
- //ставим на r указатель p (последний элемент)
- p = r;
- }
- return p;//возвращаем как результат функции верхний эл-т
- }
- point* add_point(point* beg, int k)
- //добавление элемента с номером k
- {
- point*p = beg;//встали на первый элемент
- point*New = new(point);//создали новый элемент
- cout << "Key?"; cin >> New->data;
- if (k == 0)//добавление в начало, если k=0
- {
- New->next = beg;
- beg = New;
- return beg;
- }
- for (int i = 0; i<k - 1 && p != 0; i++)
- p = p->next;//проходим по списку до(k-1) элемента или до конца
- if (p != 0)//если k-й элемент существует
- {
- New->next = p->next;//связываем New и k-й элемент
- p->next = New;//связываем (k-1)элемент и New
- }
- return beg;
- }
- point* del_point(point*beg, int k)
- {
- point*p = beg;
- if (k == 0)//удаление первого элемента
- {
- beg = beg->next;
- delete p;
- return beg;
- }
- //проходим по списку до элемента с номером k-1
- for (int i = 1; i<k&&p->next != 0; i++)
- p = p->next;
- /*если такого элемента в списке нет, то возвращаем указатель на
- начало списка в качестве результата функции*/
- if (p->next == 0) return beg;
- point* r = p->next;//ставим указатель r на k-й элемент
- p->next = r->next;//связываем k-1 и k+1 элемент
- delete r;//удаляем k-й элемент из памяти
- return beg;
- }
- void main(){
- setlocale(LC_ALL, "rus");
- int n,i=0;
- cout << "Введите кол-во элементов" << endl;
- cin >> n;
- point* beg = make_list(n);
- point* p;
- cout << "Исходный список : " << endl;
- print_list(beg);
- cout << endl;
- char* need = new char[10];
- cout << "Введите значение поля , после которого необходимо добавить эл-т" << endl;
- cin >> need;
- p = beg;
- while (beg->next != NULL && strcmp(p->data,need)){
- p = p->next;
- i++;
- }
- add_point(beg, i);
- cout << endl;
- print_list(beg);
- cout << endl;
- del_point(beg, 2);
- print_list(beg);
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment