Guest User

Untitled

a guest
Feb 19th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. #include<stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node
  5. {
  6. int data;
  7. int index;
  8. struct node *next;
  9. };
  10.  
  11. struct stack
  12. {
  13. int index_number;
  14. struct stack *link;
  15. };
  16.  
  17. typedef struct node Node;
  18. typedef struct stack Stack;
  19. typedef Node* nodePointer;
  20. typedef Stack* stackPointer;
  21.  
  22. void insert(nodePointer *, int, int);
  23. void push(stackPointer *, int);
  24. int pop(stackPointer *);
  25. void deleteList(nodePointer *);
  26. void printList(nodePointer);
  27.  
  28. int main()
  29. {
  30. int c;
  31. int number = 0;
  32. nodePointer list = 0;
  33. stackPointer top = 0;
  34. nodePointer pointer;
  35.  
  36. freopen("set.txt","r",stdin);
  37.  
  38. while(1)
  39. {
  40. c = getchar();
  41. while( c != '\n')
  42. {
  43. if(c == ' ')
  44. {break;}
  45. insert(&list, c, number++);
  46. }
  47.  
  48. getchar();
  49. number = 0;
  50. printList(list);
  51.  
  52. int temp;
  53. int missmatch = -1;
  54.  
  55. for (pointer = list; pointer; pointer = pointer->next)
  56. {
  57. if ((pointer->data) == '(')
  58. {
  59. push(&top, pointer->index);
  60. }
  61.  
  62. else if ((pointer->data) == ')')
  63. {
  64. if ((temp = pop(&top)) == -1)
  65. {
  66. if (missmatch == -1)
  67. {
  68. missmatch = pointer->index;
  69. }
  70. else
  71. {
  72. printf("dangling parenthesis: : %d,%d\n", missmatch, pointer->index);
  73. missmatch = -1;
  74. }
  75. }
  76.  
  77. else
  78. {
  79. printf("parentheses matching : %d,%d\n", temp, pointer->index);
  80. }
  81. }
  82. }
  83. }
  84.  
  85. printf("\n");
  86. deleteList(&list);
  87.  
  88. while ((pop(&top)) != -1);
  89. top = 0;
  90. list = 0;
  91.  
  92. printf("\n");
  93. deleteList(&list);
  94.  
  95. return 0;
  96. }
  97.  
  98. void insert(nodePointer *leading, int value, int num)
  99. {
  100. if (!(*leading))
  101. {
  102. *leading = (Node *)malloc(sizeof(Node));
  103. if (!(*leading))
  104. {
  105. printf("Memory allocating was failed.\n\n");
  106. exit(-1);
  107. }
  108. (*leading)->data = value;
  109. (*leading)->index = num;
  110. (*leading)->next = 0;
  111. return;
  112. }
  113.  
  114. nodePointer pointer = *leading;
  115.  
  116. while (pointer->next)
  117. {
  118. pointer = pointer->next;
  119. }
  120.  
  121. pointer->next = (Node *)malloc(sizeof(Node));
  122. pointer = pointer->next;
  123.  
  124. if (!pointer)
  125. {
  126. printf("Memory allocating was failed.\n\n");
  127. exit(-1);
  128. }
  129.  
  130. pointer->data = value;
  131. pointer->index = num;
  132. pointer->next = 0;
  133.  
  134. }
  135.  
  136. void push(stackPointer *top, int num)
  137. {
  138. if (!(*top))
  139. {
  140. *top =(Stack *)malloc(sizeof(Stack));
  141. if (!(*top))
  142. {
  143. printf("Memory allocating was failed.\n\n");
  144. exit(-1);
  145. }
  146. (*top)->index_number = num;
  147. (*top)->link = 0;
  148. return;
  149. }
  150. stackPointer pointer =(Stack *)malloc(sizeof(Stack));
  151. pointer->index_number = num;
  152. pointer->link = *top;
  153. *top = pointer;
  154. }
  155.  
  156. int pop(stackPointer *top)
  157. {
  158. if (!(*top))
  159. {
  160. return -1;
  161. }
  162. stackPointer pointer = *top;
  163. int temp = pointer->index_number;
  164. *top = pointer->link;
  165. free(pointer);
  166. return temp;
  167. }
  168.  
  169. void deleteList(nodePointer *list)
  170. {
  171. nodePointer pointer = *list;
  172. if (!pointer)
  173. {
  174. return;
  175. }
  176. nodePointer pointer1 = pointer->next;
  177. while (pointer1)
  178. {
  179. *list = pointer1;
  180. free(pointer);
  181. pointer = pointer1;
  182. pointer1 = pointer->next;
  183. }
  184. *list = pointer1;
  185. free(pointer);
  186. }
  187.  
  188. void printList(nodePointer leading)
  189. {
  190. nodePointer pointer = leading;
  191. if (!pointer)
  192. {
  193. return;
  194. }
  195. while(pointer)
  196. {
  197. printf("%c\t", pointer->data);
  198. pointer = pointer->next;
  199. }
  200. printf("\n");
  201. for (pointer = leading; pointer; pointer = pointer->next)
  202. {
  203. printf("%d\t", pointer->index);
  204. }
  205. printf("\n");
  206. }
Add Comment
Please, Sign In to add comment