Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- struct list
- {
- char el;
- list *next, *pred;
- };
- struct dline
- {
- list *beg;
- };
- void create(dline **d);
- int isEmpty(dline *d);
- void push(dline **st, char x);
- int pop(dline **d, char *x);
- int main()
- {
- char x;
- dline *d;
- create(&d);
- push(&d, 1);
- push(&d, 2);
- push(&d, 3);
- pop(&d, &x);
- _getch();
- return 0;
- }
- void create(dline **d)
- {
- *d = new dline;
- (*d)->beg = new list;
- (*d)->beg->next = (*d)->beg;
- (*d)->beg->pred = (*d)->beg;
- }
- int isEmpty(dline *d)
- {
- return d->beg->next == d->beg;
- }
- void push(dline **d, char x)
- {
- list **r = &(*d)->beg;
- if (isEmpty(*d))
- {
- (*r)->el = x;
- (*r)->pred = new list;
- (*r)->pred->next = *r;
- (*r)->pred->pred = *r;
- (*r)->next = (*r)->pred;
- (*d)->beg = (*r)->pred;
- }
- else
- {
- (*r)->el = x;
- (*r)->next->pred = new list;
- (*r)->next->pred->next = (*r)->next;
- (*r)->next->pred->pred = *r;
- (*r)->next = (*r)->next->pred;
- (*d)->beg = (*r)->next;
- }
- }
- int pop(dline **d, char *x)
- {
- list **r = &(*d)->beg;
- if (!isEmpty(*d))
- {
- *x = (*r)->next->el;
- if ((*r)->next->next != (*r)->next)
- {
- list *d1, *d2;
- d1 = (*r)->next->next;
- d2 = (*r)->next->pred;
- delete (*r)->next;
- (*r)->next = d1;
- (*r)->next->pred = d2;
- }
- else
- {
- delete (*r)->next;
- (*r)->next = *r;
- (*r)->pred = *r;
- }
- return 1;
- }
- else
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement