monoteen

LinkedQueue

Nov 26th, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. typedef char element;
  5. typedef struct DQNode{
  6.     element data;
  7.     struct DQNode *llink;
  8.     struct DQNode *rlink;
  9. }DQNode;
  10.  
  11. typedef struct{
  12.     DQNode *front, *rear;
  13. } DQueType;
  14.  
  15. DQueType *createDQue()
  16. {
  17.     DQueType *DQ;
  18.     DQ = (DQueType *)malloc(sizeof(DQueType));
  19.     DQ->front = NULL;
  20.     DQ->rear = NULL;
  21.     return DQ;
  22. }
  23.  
  24. int isEmpty(DQueType *DQ)
  25. {
  26.     if (DQ->front == NULL) {
  27.         printf("\n Linked Queue is Empty \n");
  28.         return 1;
  29.     }
  30.     else return 0;
  31. }
  32.  
  33. void insertFront(DQueType *DQ, element item)
  34.  
  35. {
  36.     DQNode *newNode = (DQNode *)malloc(sizeof(DQNode));
  37.     newNode->data = item;
  38.     if (DQ->front == NULL) {
  39.         DQ->front = newNode;
  40.         DQ->rear = newNode;
  41.         newNode->rlink = NULL;
  42.         newNode->llink = NULL;
  43.     }
  44.     else {
  45.         DQ->front->llink = newNode;
  46.         newNode->rlink = DQ->front;
  47.         newNode->llink = NULL;
  48.         DQ->front = newNode;
  49.     }
  50. }
  51.  
  52. void insertRear(DQueType *DQ, element item)
  53. {
  54.     DQNode *newNode = (DQNode *)malloc(sizeof(DQNode));
  55.     newNode->data = item;
  56.     if (DQ->rear == NULL) {
  57.         DQ->front = newNode;
  58.         DQ->rear = newNode;
  59.         newNode->rlink = NULL;
  60.         newNode->llink = NULL;
  61.     }
  62.     else {
  63.         DQ->rear->rlink = newNode;
  64.         newNode->rlink = NULL;
  65.         newNode->llink = DQ->rear;
  66.         DQ->rear = newNode;
  67.     }
  68. }
  69.  
  70. element deleteFront(DQueType *DQ)
  71. {
  72.     DQNode *old = DQ->front;
  73.     element item;
  74.     if (isEmpty(DQ)) return 0;
  75.     else {
  76.         item = old->data;
  77.         if (DQ->front->rlink == NULL) {
  78.             DQ->front = NULL;
  79.             DQ->rear = NULL;
  80.         }
  81.         else {
  82.             DQ->front = DQ->front->rlink;
  83.             DQ->front->llink = NULL;
  84.         }
  85.         free(old);
  86.         return item;
  87.     }
  88. }
  89.  
  90. element deleteRear(DQueType *DQ)
  91. {
  92.     DQNode *old = DQ->rear;
  93.     element item;
  94.     if (isEmpty(DQ)) return 0;
  95.     else {
  96.         item = old->data;
  97.         if (DQ->rear->llink == NULL) {
  98.             DQ->front == NULL;
  99.             DQ->rear = NULL;
  100.         }
  101.         else {
  102.             DQ->rear = DQ->rear->llink;
  103.             DQ->rear->rlink = NULL;
  104.         }
  105.         free(old);
  106.         return item;
  107.     }
  108. }
  109.  
  110. int removeFront(DQueType *DQ)
  111. {
  112.     DQNode *old = DQ->front;
  113.     if (isEmpty(DQ)) return 0;
  114.     else if (DQ->front->rlink == NULL) {
  115.         DQ->front = NULL;
  116.         DQ->rear = NULL;
  117.     }
  118.     else {
  119.         DQ->front = DQ->front->rlink;
  120.         DQ->front->llink = NULL;
  121.     }
  122.     free(old); return 1;
  123. }
  124.  
  125. int removeRear(DQueType *DQ)
  126. {
  127.     DQNode *old = DQ->rear;
  128.     if (isEmpty(DQ)) return 0;
  129.     else if (DQ->rear->llink == NULL) {
  130.         DQ->front = NULL;
  131.         DQ->rear = NULL;
  132.     }
  133.     else {
  134.         DQ->rear = DQ->rear->llink;
  135.         DQ->rear->rlink = NULL;
  136.     }
  137.     free(old); return 1;
  138. }
  139.  
  140. element peekFront(DQueType *DQ)
  141. {
  142.     element item;
  143.     if (isEmpty(DQ)) return 0;
  144.     else {
  145.         item = DQ->front->data;
  146.         return item;
  147.     }
  148. }
  149.  
  150. element peekRear(DQueType *DQ)
  151. {
  152.     element item;
  153.     if (isEmpty(DQ)) return 0;
  154.     else {
  155.         item = DQ->rear->data;
  156.         return item;
  157.     }
  158. }
  159.  
  160. void printDQ(DQueType *DQ)
  161. {
  162.     DQNode *temp = DQ->front;
  163.     printf("DqQue : [");
  164.     while (temp) {
  165.         printf("%3c", temp->data);
  166.         temp = temp->rlink;
  167.     }
  168.     printf(" ] \n");
  169. }
  170.  
  171. int main(void)
  172. {
  173.     DQueType *DQ1 = createDQue();
  174.     element data;
  175.     printf("front 삽입 A>> "); insertFront(DQ1, 'A'); printDQ(DQ1);
  176.     printf("front 삽입 B>> "); insertFront(DQ1, 'B'); printDQ(DQ1);
  177.     printf("rear 삽입 C>>  "); insertRear(DQ1, 'C'); printDQ(DQ1);
  178.     printf("front 삭제  >> "); deleteFront(DQ1); printDQ(DQ1);
  179.     printf("rear 삭제  >> "); deleteRear(DQ1); printDQ(DQ1);
  180.     printf("rear 삽입 D>> "); insertRear(DQ1, 'D'); printDQ(DQ1);
  181.     printf("front 삽입 E>> "); insertFront(DQ1, 'E'); printDQ(DQ1);
  182.     printf("front 삽입 F>> "); insertFront(DQ1, 'F'); printDQ(DQ1);
  183.  
  184.     data = peekFront(DQ1); printf("peek Front item : %c \n", data);
  185.     data = peekRear(DQ1); printf("peek Rear item : %c \n", data);
  186.  
  187.     return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment