Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string.h>
- #include <stdio.h>
- #include <math.h>
- #include <windows.h>
- struct elem
- {
- int num;
- elem* next;
- };
- void pechat(elem*first)
- {
- elem* q;
- q = first;
- while (q != NULL)
- {
- printf_s("%5d", q->num);
- q = q->next;
- }
- }
- void add(elem** first)
- {
- elem * n, * p, * q,*last;
- int fl;
- puts("Введите число, которое хотите добавить");
- int k;
- scanf_s("%d", &k);
- {
- n = new elem;
- n->num = k;
- q = *first;
- if (abs(n->num) < abs(q->num))
- {
- n->next = *first;
- *first = n;
- }
- else
- {
- fl = 0;
- p = *first;
- q = *first;
- while ((q = q->next) != NULL && !fl)
- {
- if (abs(n->num) < abs(q->num)) //вставка n перед q
- {
- n->next = p->next;
- p->next = n;
- fl = 1;
- }
- else p = q;
- }
- if (!fl)
- {
- n->next = NULL;
- p->next = n;
- last = n;
- }
- }
- }
- }
- void udalenie(elem** first)
- {
- elem* q, * p, * t;
- puts("Введите число, которое хотите удалить");
- int k;
- scanf_s("%d", &k);
- t = *first;
- if (t->num == k)
- {
- q = *first;
- *first = t->next;
- delete q;
- }
- else {
- q = *first;
- t = t->next;
- while (t->num != k)
- {
- q = q->next;
- t = t->next;
- }
- if (t->next == NULL)
- {
- q->next = NULL;
- delete t;
- }
- else
- {
- q->next = t->next;
- delete t;
- }
- }
- }
- void main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int i, j, k, m, fl;
- char string[100];
- char chislo[5];
- elem* first, * q, * n,*p,*last;
- puts("Введите строку чисел, через пробел");
- gets_s(string, 100);
- first = NULL; //обнуление списка
- chislo[0] = '\0';
- j = 0;
- for (i = 0; i <= strlen(string); i++)
- {
- if ((string[i] == ' ') || (string[i] == '\0'))
- {
- chislo[j] = '\0';
- m = atoi(chislo);
- j = 0;
- chislo[0] = '\0';
- if (first == NULL) //формирование
- {
- first = new elem;
- first->num = m;
- first->next = NULL;
- last = first;
- }
- else
- {
- n = new elem;
- n->num = m;
- if (abs(n->num) < abs(first->num)) //вставка в начало списка
- {
- n->next = first;
- first = n;
- }
- else
- {
- fl = 0;
- p = first;
- q = first;
- while ((q = q->next) != NULL && !fl)
- {
- if (abs(n->num) < abs(q->num)) //вставка n перед q
- {
- n->next = p->next;
- p->next = n;
- fl = 1;
- }
- else p = q; //н после q
- }
- if (!fl)
- {
- n->next = NULL;
- p->next = n;
- last = n;
- }
- }
- }
- }
- else chislo[j++] = string[i];
- }
- puts("Список по абсолютной величине");
- pechat(first);
- printf_s("\n");
- add(&first);
- pechat(first);
- puts("");
- udalenie(&first);
- pechat(first);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement