Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct Node{
- int value;
- struct Node *next;
- } Spisok;
- Spisok* create(int data) // Создание первого эл-та
- {
- // Выделяем дин.память
- Spisok *tmp = (Spisok*)malloc(sizeof(Spisok));
- tmp -> value = data; // Помещаем значение узлу
- tmp -> next = NULL; // Присваиваем началу списка адрес NULL
- return(tmp);
- }
- Spisok* add_element_start(int data, Spisok *head) // Передаем адресс головы и значение
- {
- // Выделение памяти под узел списка
- Spisok *tmp = (Spisok*)malloc(sizeof(Spisok));
- // Присваивание значения узлу
- tmp -> value = data;
- // Присваивание указателю на следующий элемент значения указателя на «голову»
- // первоначального списка
- tmp -> next = head;
- return(tmp); // Возвращаем адрес на узел
- }
- Spisok *Delete(int data, Spisok *head)
- {
- // Присваивание новому указателю tmp указателя head, p - NULL
- Spisok *tmp = head, *p = NULL;
- // Проверка списка на пустоту
- if (head == NULL)
- return NULL;
- // Если список не пуст, поиск указателя на искомый элемент
- while (tmp && tmp -> value != data){
- p = tmp;
- tmp = tmp -> next;
- }
- // Если удаляемый элемент первый
- if (tmp == head){
- tmp=tmp -> next;
- free(head);
- return tmp;
- }
- // Если в списке нет искомого элемента, то возвращаем первоначальный список
- if (!tmp) return head;
- // Присваивание новому указателю указателя tmp
- p -> next = tmp -> next;
- // Освобождение памяти для указателя tmp
- free(tmp);
- return head;
- }
- int last_element(int data, Spisok *head){
- Spisok *tmp = head, *p = NULL;
- if(head == NULL) return 0;
- while(tmp -> next != NULL) tmp=tmp->next; // Ищем начало списка
- p=create(data); // Создаем
- tmp -> next = p; // Меняем адрес с NULL на новый p
- return 1;
- }
- int DeleteAll(Spisok *head){
- Spisok *tmp = head;
- while(tmp -> next != NULL){
- tmp= tmp -> next; // двигаемся по списку
- free(head); // чистмм память
- head= tmp; // сохраняем адрес следующего
- }
- return 1;
- }
- int main(int argc, char *argv[]) {
- struct Node *p=NULL;
- p=create(1);
- p=add_element_start(2,p);
- p=add_element_start(3,p);
- p=add_element_start(4,p);
- last_element(5,p);
- p=Delete(4,p);
- DeleteAll(p);
- p=create(1);
- // Вывод
- while (p != NULL){
- printf("%d\n", p -> value);
- p = p -> next;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement