Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct slistEl
- {
- struct slistEl * next;
- int data;
- };
- unsigned l_size(struct slistEl * p)
- {
- int c = 0;
- while (p)
- {
- c++;
- p = p->next;
- }
- return c;
- }
- void l_printl(struct slistEl * p)
- {
- int i;
- printf("Number of elements : %d", l_size(p));
- for (i = 1; p; p = p->next)
- printf("Element #%d data %d\n", i++, p->data);
- }
- void l_push_front(struct slistEl ** head, int v)
- {
- struct slistEl * p;
- p = (struct slistEl*) malloc(sizeof(struct slistEl));
- p->data = v;
- p->next = *head;
- *head = p;
- }
- void l_push_back(struct slistEl ** head, int v)
- {
- struct slistEl *p, *e;
- e = (struct slistEl*) malloc(sizeof(struct slistEl));
- e->next = NULL;
- e->data = v;
- p = *head;
- if (p)
- {
- while (p->next) p = p->next;
- p->next = e;
- }
- else *head = e;
- }
- void l_insert_before(struct slistEl * head, struct slistEl * e, int v)
- {
- struct slistEl * p = head;
- if (p == e) l_push_front(&head, v);
- else
- {
- while (p->next != e) p = p->next;
- p->next = (struct slistEl*) malloc(sizeof(struct slistEl));
- p->next->next = e;
- p->next->data = v;
- }
- }
- void l_insert_after(struct slistEl * e, int v)
- {
- struct slistEl * p = (struct slistEl*) malloc(sizeof(struct slistEl));
- p->next = e->next;
- p->data = v;
- e->next = p;
- }
- void l_pop_front(struct slistEl ** head)
- {
- struct slistEl * p = *head;
- if (p)
- {
- *head = p->next;
- free(p);
- }
- }
- void l_pop_back(struct slistEl * head)
- {
- struct slistEl * p = head;
- if (p)
- {
- if (p->next)
- {
- while (p->next->next) p = p->next;
- free(p->next);
- p->next = NULL;
- }
- else
- {
- head = NULL;
- free(p);
- }
- }
- }
- void l_remove(struct slistEl * head, struct slistEl * e)
- {
- struct slistEl * p;
- if (head == e) l_pop_front(&head);
- else
- {
- p = head;
- while (p->next != e) p = p->next;
- p->next = e->next;
- free(e);
- }
- }
- int main()
- {
- struct slistEl * L = NULL;
- struct slistEl * e;
- int i;
- for (i = 1; i <= 7; i++) l_push_back(&L, i);
- l_printl(L);
- e = L;
- for (i = 1; i <= 3; i++) e = e->next;
- l_insert_before(L, e, 8);
- l_insert_after(e, 5);
- l_printl(L);
- l_remove(L, e);
- l_printl(L);
- l_pop_front(&L);
- l_printl(L);
- l_pop_back(L);
- l_printl(L);
- }
Advertisement
Add Comment
Please, Sign In to add comment