Advertisement
Guest User

415 - Balanceamento de Parênteses

a guest
Oct 26th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct node Node;
  6. struct node {
  7. char item;
  8. Node *next_node;
  9. };
  10.  
  11. typedef struct stack Stack;
  12. struct stack {
  13. Node *top;
  14. };
  15.  
  16. Stack* create_stack() {
  17. Stack *stack = (Stack*) malloc(sizeof(Stack));
  18. stack->top = NULL;
  19. return stack;
  20. }
  21.  
  22. void push(Stack *stack, char item) {
  23. Node *new_top = (Node*) malloc(sizeof(Node));
  24. new_top->item = item;
  25. new_top->next_node = stack->top;
  26. stack->top = new_top;
  27. }
  28.  
  29. int is_empty(Stack *stack) {
  30. return (stack->top == NULL);
  31. }
  32.  
  33. char pop(Stack *stack) {
  34. if (is_empty(stack)) return '0';
  35.  
  36. Node *return_top = (Node*) malloc(sizeof(Node));
  37. char item = stack->top->item;
  38. stack->top = stack->top->next_node;
  39. free(return_top);
  40. return item;
  41. }
  42.  
  43. char peek(Stack *stack) {
  44. if(is_empty(stack)) return '0';
  45.  
  46. else return stack->top->item;
  47. }
  48.  
  49. void free_list(Node *node) {
  50. if(node == NULL) return;
  51.  
  52. free_list(node->next_node);
  53.  
  54. free(node);
  55. }
  56.  
  57. int is_balanced(char* sequence) {
  58. Stack* stack_parenthesis = create_stack();
  59. Stack* stack_brackets = create_stack();
  60. int i, balanced = 1;
  61.  
  62. for(i = 0; i < strlen(sequence); ++i) {
  63. if(sequence[i] == '(') push(stack_parenthesis, sequence[i]);
  64. if(sequence[i] == '[') push(stack_brackets, sequence[i]);
  65.  
  66. if(sequence[i] == ')') {
  67. if(pop(stack_parenthesis) == '0') {
  68. balanced = 0;
  69. break;
  70. }
  71. }
  72.  
  73. if(sequence[i] == ']') {
  74. if(pop(stack_brackets) == '0') {
  75. balanced = 0;
  76. break;
  77. }
  78. }
  79. }
  80.  
  81. if(!is_empty(stack_parenthesis) || !is_empty(stack_brackets)) balanced = 0;
  82. free_list(stack_parenthesis->top);
  83. free(stack_parenthesis);
  84. free_list(stack_brackets->top);
  85. free(stack_brackets);
  86.  
  87. return balanced;
  88. }
  89.  
  90. int main() {
  91. char sequence[256];
  92. int n, i;
  93.  
  94. scanf("%d", &n);
  95. getchar();
  96.  
  97. for(n; n != 0; --n) {
  98. fgets(sequence, 255, stdin);
  99.  
  100. if(is_balanced(sequence)) printf("Yes\n");
  101. else printf("No\n");
  102. }
  103.  
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement