Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- struct node {
- int koeff;
- int power;
- struct node* next;
- };
- typedef struct node* list;
- void createList(list* phead, char* name);
- void enterListElems(list* phead);
- int addToHead(list* phead, int koeff, int power);
- int checkIfExist(list* phead, int power);
- void printList(list* phead, char* name);
- void del_node(list p, int delpower);
- int Delete(list* phead, int delpower);
- void Pop(list phead);
- /**********************************************************
- * void createList(list *phead)
- * создаёт список
- *
- * Вход:
- * phead - указатель на начало списка
- * name - имя списка
- *
- * Выход:
- * нет
- *
- * Возвращаемое значение:
- * нет
- **********************************************************/
- void createList(list* phead)
- {
- *phead = NULL;
- }
- /**********************************************************
- * int checkIfExist(list *phead, int power)
- * проверяет наличие в списке степени power
- *
- * Вход:
- * phead - указатель на начало списка
- * power - искомая степень
- *
- * Выход:
- * нет
- *
- * Возвращаемое значение:
- * 1 - найдена
- * 0 - не найдена
- **********************************************************/
- int checkIfExist(list* phead, int power, int koeff)
- {
- list p = *phead;
- while (p != NULL)
- {
- if (p->power == power)
- {
- p->koeff += koeff;
- return 1;
- }
- p = p->next;
- }
- return 0;
- }
- /**********************************************************
- * void addToHead(list *phead, int koeff, int power)
- * добавляет элемент в начало списка
- *
- * Вход:
- * phead - указатель на начало списка
- * koeff - коэффициент
- * power - степень X
- *
- * Выход:
- * элемент добавлен в начало списка
- *
- * Возвращаемое значение:
- * 1 - добавлено
- * 0 - не добавлено
- **********************************************************/
- int addToHead(list* phead, int koeff, int power)
- {
- list p;
- if (checkIfExist(phead, power, koeff))
- {
- printf("Такая степень уже есть %d\n", power);
- return 0;
- }
- p = (list)malloc(sizeof(*p));
- p->koeff = koeff;
- p->power = power;
- p->next = *phead;
- *phead = p;
- printf("Добавлено: %dx^%d\n", p->koeff, p->power);
- return 1;
- }
- /**********************************************************
- * void enterListElems(list *phead)
- * осуществляет ввод элементов списка
- *
- * Вход:
- * phead - указатель на начало списка
- *
- * Выход:
- * список, заполненный элементами
- *
- * Возвращаемое значение:
- * нет
- **********************************************************/
- void enterListElems(list* phead)
- {
- int i_koeff = 1, i_power = 1;
- while (i_koeff != 0)
- {
- printf("\nВвод\n");
- printf("Kоэффициент: ");
- scanf("%d", &i_koeff);
- if (i_koeff == 0)
- return;
- printf("Cтепень: ");
- scanf("%d", &i_power);
- addToHead(phead, i_koeff, i_power);
- }
- }
- /**********************************************************
- * void del_node(list p, int delpower)
- * осуществляет удаление "узла" между элементами
- *
- * Вход:
- * p - где удаляем связку
- * delpower - нужная степень (критерий удаления)
- *
- * Выход:
- * список без некоторых связок
- *
- * Возвращаемое значение:
- * нет
- **********************************************************/
- void del_node(list p, int delpower)
- {
- list a;
- a = p->next;
- while (p->next != NULL)
- {
- if (a->power < delpower)
- {
- a = p->next;
- p->next = a->next;
- free(a);
- }
- else
- {
- p = p->next;
- a = p->next;
- }
- }
- }
- /**********************************************************
- * int Delete(list *phead, int delpower)
- * осуществляет удаление нужных членов
- *
- * Вход:
- * *phead - указатель на начало списка
- * delpower - нужная степень (критерий удаления)
- *
- * Выход:
- * новый список
- *
- * Возвращаемое значение:
- * 0 - произведено удаление
- * 1 - пустой список
- **********************************************************/
- int Delete(list* phead, int delpower)
- {
- if (*phead == NULL)
- return 1;
- list p;
- p = *phead;
- while ((p != NULL) && (p->power < delpower))
- p = p->next;
- if (p != NULL)
- {
- del_node(p, p->power);
- *phead = p;
- }
- else
- {
- list a;
- p = *phead;
- while (p->next != NULL)
- {
- a = p;
- p = p->next;
- free(a);
- }
- *phead = NULL;
- }
- return 0;
- }
- /**********************************************************
- * void printList(list *phead)
- * печатает список на экран
- *
- * Вход:
- * phead - указатель на начало списка
- *
- * Выход:
- * нет
- *
- * Возвращаемое значение:
- * нет
- **********************************************************/
- void printList(list* phead)
- {
- list p;
- for (p = *phead; p != NULL; p = p->next)
- printf("%dx^%d\n", p->koeff, p->power);
- printf("\n");
- }
- int main(void)
- {
- list L1;
- int k;
- setlocale(LC_ALL, "RUSSIAN");
- createList(&L1);
- enterListElems(&L1);
- printf("\n------\n");
- printList(&L1);
- printf("------\n\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement