Advertisement
Guest User

Week5_Practicum

a guest
May 27th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. // Opdracht 5.1 prototypes
  5. void opdracht5_1();
  6. int count(int n, int* a, int len);
  7. // Opdracht 5.2 prototypes
  8. void opdracht5_2();
  9. char* herhaal(char* s,int n);
  10.  
  11. // Opdracht 5.3 prototypes
  12. typedef struct node {
  13.     int data;
  14.     struct node * nextNode;
  15. }NODE, *NODEPtr;
  16.  
  17. NODEPtr  tailNode;// = {1, NULL};
  18. NODEPtr  headNode;// = {2, &tailNode};
  19.  
  20. void opdracht5_3();
  21. void addFirst(int data);
  22. void addLast(int data);
  23. void deleteItem(int data);
  24. void initBaseNodes();
  25. NODEPtr lookUpByValue(int data, NODEPtr node, int limit);
  26. NODEPtr lookUpByPointer(NODEPtr node, NODEPtr listStart, int limit);
  27. NODEPtr getPreviousNode(NODEPtr node, NODEPtr listStart, int limit);
  28. // Opdracht 5.4 prototypes
  29. void opdracht5_4();
  30. void insert(int data, NODEPtr node);
  31. void initNodes();
  32. int isSorted();
  33.  
  34. NODEPtr  sortedTailNode;
  35. NODEPtr  sortedHeadNode;
  36.  
  37. // Opdracht 5.5 prototypes
  38. struct listNode {
  39. int data;
  40. struct listNode* next;
  41. };
  42. typedef struct listNode ListNode;
  43.  
  44. struct queue {
  45. ListNode* head;
  46. ListNode* tail;
  47. };
  48. typedef struct queue Queue;
  49.  
  50. void opdracht5_5();
  51. Queue* newQueue();
  52. void freeQueue(Queue* q);
  53. void enqueue(Queue* q, int data);
  54. int dequeue(Queue* q);
  55. void show(Queue* q);
  56. int main()
  57. {
  58.     printf("!...Starting Application...!\n");
  59.     printf("node pointer size: %d, \n", sizeof(NODEPtr));
  60.     printf("node size: %d, \n", sizeof(NODE));
  61.     printf("\n___Opdracht 5_1___\n");
  62.     opdracht5_1();
  63.     printf("\n___Opdracht 5_2___\n");
  64.     opdracht5_2();
  65.     printf("\n___Opdracht 5_3___\n");
  66.     opdracht5_3();
  67.     printf("\n___Opdracht 5_4___\n");
  68.     opdracht5_4();
  69.     printf("\n___Opdracht 5_5___\n");
  70.     opdracht5_5();
  71.     printf("!...Ending Application...!\n");
  72.     while(1);
  73.     return 0;
  74. }
  75. void opdracht5_1()  {
  76.     int a[] = {5, 4, 5, 3, 1, 2, 5, 5};
  77.     int len = sizeof(a)/sizeof(a[0]);
  78.     int i = count(5,a,len);
  79.     printf("value is %d\n", i);
  80. }
  81. int count(int n, int* a, int len)   {
  82.  
  83.     int temp = 0;
  84.     if(len > 1)
  85.         temp = count(n, (a+1), len-1);
  86.     if(*a == n)
  87.         temp++;
  88.     return temp;
  89. }
  90. void opdracht5_2()  {
  91.     char* resultaatHerhaal = herhaal("sad", 2);
  92.     printf("opdracht5_2 = %s\n", resultaatHerhaal);
  93. }
  94. char* herhaal(char* s,int n)   {
  95.     char* temp = s;
  96.     if(n > 1)   {
  97.         char *prevStep = herhaal(s, n - 1);
  98.         temp = malloc(strlen(s)+strlen(prevStep)+1);
  99.         temp[0] = '\0';
  100.         strcat(temp,prevStep);
  101.         strcat(temp,s);
  102.     }
  103.     return temp;
  104. }
  105. void garbageTest()  {
  106.     int* test = malloc(1000000);
  107.     free(test);
  108. }
  109. void opdracht5_3()          {
  110.     initBaseNodes();
  111.     //printf("Cur value is = %d\n", headNode->nextNode->data);
  112.  
  113.     addFirst(5);
  114.     addFirst(4);
  115.     addLast(6);
  116.     addLast(9);
  117.  
  118.     int a = headNode->nextNode->nextNode->nextNode->data;
  119.     int b = headNode->nextNode->nextNode->nextNode->data;
  120.     NODEPtr temp = lookUpByValue(2, headNode, 5);
  121.     garbageTest();
  122.     //printf("wimbple\n");
  123.     //printf("floopy\n");
  124.     deleteItem(4);
  125.     deleteItem(9);
  126.     deleteItem(5);
  127.     deleteItem(6);
  128.     addFirst(5);
  129.     printf("value of node %d\n", tailNode->nextNode->data);
  130.     printf("Howmany elements? %d\n", tailNode->data);
  131.  
  132. }
  133. NODEPtr lookUpByValue(int data, NODEPtr node, int limit)  {
  134.     NODEPtr returnNode = NULL;
  135.     if(node->data == data && limit > 0)
  136.         return node;
  137.     else
  138.         returnNode = lookUpByValue(data, node->nextNode, (limit - 1));
  139.     return returnNode;
  140. }
  141. NODEPtr lookUpByPointer(NODEPtr node, NODEPtr listStart, int limit)   {
  142.     NODEPtr curNode = NULL;
  143.     if(limit > 0)   {
  144.         if(node == listStart)
  145.             return node;
  146.         else
  147.             curNode = lookUpByPointer(node, listStart->nextNode, limit - 1);
  148.     }
  149.     return curNode;
  150. }
  151. NODEPtr getPreviousNode(NODEPtr node, NODEPtr listStart, int limit) {
  152.     NODEPtr curNode = NULL;
  153.     if(limit > 0)   {
  154.         printf("got here...\n");
  155.         if(node == listStart->nextNode) {
  156.             printf("got here too...\n");
  157.             return listStart;
  158.         }
  159.         else
  160.             curNode = getPreviousNode(node, listStart->nextNode, limit - 1);
  161.     }
  162.     printf("value here is %d \n", curNode->data);
  163.     return curNode;
  164. }
  165. void initBaseNodes()    {
  166.     tailNode = malloc(sizeof(NODE));
  167.     tailNode->data = 0;
  168.     tailNode->nextNode = NULL;
  169.     headNode = malloc(sizeof(NODE));
  170.     headNode->data = 2;
  171.     headNode->nextNode = tailNode;
  172.     //tailNode = (NODEPtr){0, NULL     };
  173.     //headNode = (NODEPtr){2, tailNode };
  174. }
  175. void addFirst(int data)     {
  176.     NODEPtr next = malloc(sizeof(NODE));
  177.     next->data = data;
  178.     next->nextNode = headNode->nextNode;
  179.     headNode->nextNode = next;
  180.     if(tailNode->nextNode == NULL)
  181.         tailNode->nextNode = next;
  182.     tailNode->data++;
  183. }
  184. void addLast(int data)      {
  185.     NODEPtr lastElement = malloc(sizeof(NODE));
  186.     lastElement->data = data;
  187.     tailNode->nextNode->nextNode = lastElement;
  188.     tailNode->nextNode = lastElement;
  189.     lastElement->nextNode = tailNode;
  190.     tailNode->data++;
  191. }
  192. void deleteItem(int data)   {
  193.     NODEPtr nodeForRemoval = lookUpByValue(data, headNode, 10);
  194.     NODEPtr temp2 = lookUpByPointer(nodeForRemoval, headNode, 10);
  195.  
  196.     NODEPtr temp3 = getPreviousNode(nodeForRemoval, headNode, 10);
  197.     printf("\n____ %d %d ____\n", temp2->data, temp3->nextNode->data);
  198.     temp3->nextNode = nodeForRemoval->nextNode;
  199.     if(nodeForRemoval == tailNode->nextNode)
  200.         tailNode->nextNode = temp3;
  201.     free(nodeForRemoval);
  202.     tailNode->data--;
  203.     if(tailNode->data == 0)
  204.         tailNode->nextNode = NULL;
  205. }
  206. void opdracht5_4()      {
  207.     initNodes();
  208.     insert(12, sortedHeadNode);
  209.     //insert(5, sortedHeadNode);
  210.     //insert(19, sortedHeadNode);
  211.     //insert(14, sortedHeadNode);
  212.     //insert(24, sortedHeadNode);
  213.     printf("node on this spot is %d \n", sortedHeadNode->nextNode->nextNode->data);
  214.     printf("Is the list sorted? 1 is yes, 0 is no. Answer is: %d", isSorted(sortedHeadNode->data, sortedHeadNode));
  215. }
  216. void insert(int data, NODEPtr node)   {
  217.     NODEPtr sortedNewNode = malloc(sizeof(NODE));
  218.     sortedNewNode->data = data;
  219.     if(node->nextNode->data >= data)
  220.         insert(data, node->nextNode);
  221.     else    {
  222.         sortedNewNode->nextNode = node->nextNode;
  223.         node->nextNode = sortedNewNode;
  224.     }
  225. }
  226. void initNodes()        {
  227.     sortedTailNode = malloc(sizeof(NODE));
  228.     sortedTailNode->data = 0;
  229.     sortedTailNode->nextNode = NULL;
  230.     sortedHeadNode = malloc(sizeof(NODE));
  231.     sortedHeadNode->data = 0xFFFF;
  232.     sortedHeadNode->nextNode = sortedTailNode;
  233. }
  234. int isSorted(int curValue, NODEPtr node)          {
  235.     char returnIfError = 1;
  236.     if(node->nextNode != NULL && node->data < node->nextNode->data)
  237.         return 0;
  238.     if(node->nextNode != NULL) {
  239.         returnIfError = isSorted(node->data,  node->nextNode);
  240.     }
  241.     else
  242.         return 1;
  243. }
  244. void opdracht5_5()  {
  245.     Queue* q = newQueue();
  246.     enqueue(q, 5);
  247.     enqueue(q, 12);
  248.     printf("value here is %d\n", q->head->next->data);
  249.     freeQueue(q);
  250.     enqueue(q, 5);
  251.     enqueue(q, 8);
  252.     dequeue(q);
  253.     dequeue(q);
  254.     enqueue(q, 5);
  255.     enqueue(q, 10);
  256.     printf("added element is %d and %d\n", q->head->data, q->tail->data);
  257.     show(q);
  258. }
  259. Queue* newQueue()   {
  260.     Queue* queueCreator = malloc(sizeof(Queue));
  261.     queueCreator->tail = malloc(sizeof(ListNode));
  262.     queueCreator->tail = -1;
  263.     queueCreator->tail = NULL;
  264.  
  265.     queueCreator->head = malloc(sizeof(ListNode));
  266.     queueCreator->head->data = -1;
  267.     queueCreator->head = NULL;
  268.  
  269.     return queueCreator;
  270. }
  271. void freeQueue(Queue* q)    {
  272.     ListNode* cNode = q->head;
  273.     while(cNode != NULL && cNode != NULL)    {
  274.         ListNode* tempSwap = cNode->next;
  275.         if(cNode != q->head && cNode != q->tail)
  276.             free(cNode);
  277.         cNode = tempSwap;
  278.     }
  279.     q->head->data = -1;
  280.     q->head = NULL;
  281.     q->tail->data = -1;
  282.     q->tail = NULL;
  283. }
  284. void enqueue(Queue* q, int data)    {
  285.     ListNode* newQueueMember = (ListNode*)malloc(sizeof(ListNode));
  286.     if(q->head == NULL)
  287.         q->head = newQueueMember;
  288.  
  289.     newQueueMember->data = data;
  290.     newQueueMember->next = NULL;
  291.     if(q->tail == NULL)
  292.         q->tail = newQueueMember;
  293.  
  294.     q->tail->next = newQueueMember;
  295.     q->tail = newQueueMember;
  296.     q->tail->next = NULL;
  297. }
  298. int dequeue(Queue* q)   {
  299.     ListNode* newQueueMember = q->head;
  300.     if(q->head->next == NULL)
  301.         freeQueue(q);
  302.     else    {
  303.         q->head = q->head->next;
  304.         free(newQueueMember);
  305.     }
  306.     return 1;
  307. }
  308. void show(Queue* q)     {
  309.     ListNode* cNode = q->head;
  310.     while(cNode != NULL)    {
  311.         printf("node data \t%d\n", cNode->data);
  312.         cNode = cNode->next;
  313.     }
  314.  
  315. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement