Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- struct list
- {
- int field;
- struct list *ptr;
- };
- struct list * init(int a)
- {
- struct list *lst;
- lst = (struct list*)malloc(sizeof(struct list));
- lst->field = a;
- lst->ptr = lst;
- return(lst);
- }
- struct list * addelem(list *lst, int number)
- {
- struct list *temp, *p;
- temp = (struct list*)malloc(sizeof(list));
- p = lst->ptr;
- lst->ptr = temp;
- temp->field = number;
- temp->ptr = p;
- return(temp);
- }
- struct list * deletehead(list *root)
- {
- struct list *temp;
- temp = root->ptr;
- struct list *y=temp;
- free(root);
- return(temp);
- }
- struct list * deletelem(list *lst, list *root)
- {
- struct list *temp;
- temp = root;
- while (temp->ptr != lst)
- {
- temp = temp->ptr;
- }
- temp->ptr = lst->ptr;
- free(lst);
- return(temp);
- }
- void listprint(list *lst)
- {
- struct list *p;
- p = lst;
- do {
- printf("%d ", p->field);
- p = p->ptr;
- } while (p != lst);
- }
- struct list * swap(struct list *lst1, struct list *lst2, struct list *head)
- {
- struct list *prev1, *prev2, *next1, *next2;
- prev1 = head;
- prev2 = head;
- while (prev1->ptr != lst1)
- prev1 = prev1->ptr;
- while (prev2->ptr != lst2)
- prev2 = prev2->ptr;
- next1 = lst1->ptr;
- next2 = lst2->ptr;
- if (lst2 == next1) {
- lst2->ptr = lst1;
- lst1->ptr = next2;
- prev1->ptr = lst2;
- }
- else if (lst1 == next2) {
- lst1->ptr = lst2;
- lst2->ptr = next1;
- prev2->ptr = lst2;
- }
- else {
- prev1->ptr = lst2;
- lst2->ptr = next1;
- prev2->ptr = lst1;
- lst1->ptr = next2;
- }
- if (lst1 == head)
- return(lst2);
- if (lst2 == head)
- return(lst1);
- return(head);
- }
- int main()
- {
- struct list *head, *r, *p;
- int a, n;
- system("chcp 1251");
- system("cls");
- printf("n= ");
- scanf("%d",&n);
- head = 0;
- p = 0;
- for (int i = 0; i<n; i++)
- {
- printf("Введитеэлемент:");
- scanf("%d", &a);
- if (i == 0)
- {
- p = init(a);
- head = p;
- }
- else
- p = addelem(p, a);
- }
- listprint(head);
- r=head;
- while(head->field %3 == 0 )
- {
- head=deletehead(head);
- }
- do {
- int temp=r->field;
- r=r->ptr;
- if(r==head)
- break;
- if(r->field % 3 == 0)
- deletelem(r,head);
- }
- while(1);
- printf("\n");
- listprint(head);
- getchar(); getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement