Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.17 KB | None | 0 0
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3.  
  4. deque newEmptyDeque(void);
  5. int isEmpty(deque d);
  6. void printFrontToEnd(deque d);
  7. void insertAfterInDLL(itemtype i, node * nodePtr); /* auxiliary */
  8. void addToFront(itemtype i, deque d);
  9. void addToEnd(itemtype i, deque d);
  10. void printFrontItem(deque d);
  11. void printEndItem(deque d);
  12. itemtype popFrontItem(deque d);
  13. itemtype popEndItem(deque d);
  14. /*----------------------------------------------*/
  15. typedef int itemtype;
  16.  
  17. struct node {
  18.   struct node * previous;
  19.   itemtype item;
  20.   struct node * next;
  21. };
  22. typedef struct node node;
  23.  
  24. struct deque {
  25.   node * front;    /* pointer to a dummy node. */
  26.   node * end;      /* pointer to a dummy node. */
  27. };
  28.  
  29. typedef struct deque deque;
  30.  
  31. /*----------------------------------------------*/
  32.  
  33. deque newEmptyDeque(void){    
  34.    deque d;
  35.    d.front = malloc(sizeof(node));
  36.    d.end = malloc(sizeof(node));
  37.    (d.front)->next = d.end;
  38.    (d.front)->previous = NULL;
  39.    (d.end)->previous = d.front;
  40.    (d.end)->next = NULL;
  41.    return d;
  42. }
  43.  
  44. /*----------------------------------------------*/
  45.  
  46. int isEmpty(deque d){
  47.   return (d.front)->next == d.end;
  48. }
  49.  
  50. /*----------------------------------------------*/
  51.  
  52. void printFrontToEnd(deque d){
  53.    node * aux;
  54.    aux = (d.front)->next;
  55.    while( (aux->next) != NULL) {
  56.       printf("%d ", aux->item);
  57.       aux = aux->next;
  58.    }
  59. }
  60.  
  61. /*----------------------------------------------*/
  62. /* Auxiliary function to insert an item after a given node
  63.    in a doubly linked list.
  64. */
  65. void insertAfterInDLL(itemtype i, node * nodePtr){
  66.    node * nextPtr; /* next node after *nodePtr. */
  67.    node * newPtr;   /* new node. */
  68.    nextPtr = nodePtr->next;
  69.    newPtr = malloc(sizeof(node));
  70.    newPtr->item = i;
  71.    nodePtr->next = newPtr;
  72.    newPtr->previous = nodePtr;
  73.    newPtr->next = nextPtr;
  74.    nextPtr->previous = newPtr;      
  75. }
  76.  
  77. /*----------------------------------------------*/
  78.  
  79. void addToFront(itemtype i, deque d){
  80.   insertAfterInDLL(i, d.front);
  81. }
  82.  
  83. /*----------------------------------------------*/
  84.  
  85. void addToEnd(itemtype i,deque d){
  86.   insertAfterInDLL(i, (d.end)->previous );
  87. }
  88.  
  89. /*----------------------------------------------*/
  90.  
  91. void printFrontItem(deque d){
  92.    node * aux;
  93.    aux = (d.front)->next;
  94.    printf("%d\n ", aux->item);
  95. }
  96.  
  97. /*----------------------------------------------*/
  98. void printEndItem(deque d){
  99.    node * aux;
  100.    aux = (d.end)->previous;
  101.    printf("%d\n ", aux->item);
  102.  
  103. }
  104. /*----------------------------------------------*/
  105. itemtype popFrontItem(deque d){
  106.     node * popped;
  107.     node * next;
  108.     itemtype temp;
  109.         popped = d.front->next; // creating node in front of d.front
  110.     next = popped->next; // creating node in front of popped node
  111.     next->previous = d.front; // Pointing next node to point to d.front in previous direction
  112.     temp = popped->item; // put the value of node popped into temp
  113.     free(popped);
  114.     return temp;
  115. }      
  116. /*----------------------------------------------*/
  117. itemtype popEndItem(deque d){
  118.     node * popped;
  119.     node * previous;
  120.     itemtype temp;
  121.     popped = d.end->previous;
  122.     previous = popped->previous;
  123.     previous->next = d.end;
  124.     temp = popped->item;
  125.     free(popped);
  126.     return temp;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement