Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include <stdlib.h>
- struct node
- {
- int data;
- int index;
- struct node *next;
- };
- struct stack
- {
- int index_number;
- struct stack *link;
- };
- typedef struct node Node;
- typedef struct stack Stack;
- typedef Node* nodePointer;
- typedef Stack* stackPointer;
- void insert(nodePointer *, int, int);
- void push(stackPointer *, int);
- int pop(stackPointer *);
- void deleteList(nodePointer *);
- void printList(nodePointer);
- int main()
- {
- int c;
- int number = 0;
- nodePointer list = 0;
- stackPointer top = 0;
- nodePointer pointer;
- freopen("set.txt","r",stdin);
- while(1)
- {
- c = getchar();
- while( c != '\n')
- {
- if(c == ' ')
- {break;}
- insert(&list, c, number++);
- }
- getchar();
- number = 0;
- printList(list);
- int temp;
- int missmatch = -1;
- for (pointer = list; pointer; pointer = pointer->next)
- {
- if ((pointer->data) == '(')
- {
- push(&top, pointer->index);
- }
- else if ((pointer->data) == ')')
- {
- if ((temp = pop(&top)) == -1)
- {
- if (missmatch == -1)
- {
- missmatch = pointer->index;
- }
- else
- {
- printf("dangling parenthesis: : %d,%d\n", missmatch, pointer->index);
- missmatch = -1;
- }
- }
- else
- {
- printf("parentheses matching : %d,%d\n", temp, pointer->index);
- }
- }
- }
- }
- printf("\n");
- deleteList(&list);
- while ((pop(&top)) != -1);
- top = 0;
- list = 0;
- printf("\n");
- deleteList(&list);
- return 0;
- }
- void insert(nodePointer *leading, int value, int num)
- {
- if (!(*leading))
- {
- *leading = (Node *)malloc(sizeof(Node));
- if (!(*leading))
- {
- printf("Memory allocating was failed.\n\n");
- exit(-1);
- }
- (*leading)->data = value;
- (*leading)->index = num;
- (*leading)->next = 0;
- return;
- }
- nodePointer pointer = *leading;
- while (pointer->next)
- {
- pointer = pointer->next;
- }
- pointer->next = (Node *)malloc(sizeof(Node));
- pointer = pointer->next;
- if (!pointer)
- {
- printf("Memory allocating was failed.\n\n");
- exit(-1);
- }
- pointer->data = value;
- pointer->index = num;
- pointer->next = 0;
- }
- void push(stackPointer *top, int num)
- {
- if (!(*top))
- {
- *top =(Stack *)malloc(sizeof(Stack));
- if (!(*top))
- {
- printf("Memory allocating was failed.\n\n");
- exit(-1);
- }
- (*top)->index_number = num;
- (*top)->link = 0;
- return;
- }
- stackPointer pointer =(Stack *)malloc(sizeof(Stack));
- pointer->index_number = num;
- pointer->link = *top;
- *top = pointer;
- }
- int pop(stackPointer *top)
- {
- if (!(*top))
- {
- return -1;
- }
- stackPointer pointer = *top;
- int temp = pointer->index_number;
- *top = pointer->link;
- free(pointer);
- return temp;
- }
- void deleteList(nodePointer *list)
- {
- nodePointer pointer = *list;
- if (!pointer)
- {
- return;
- }
- nodePointer pointer1 = pointer->next;
- while (pointer1)
- {
- *list = pointer1;
- free(pointer);
- pointer = pointer1;
- pointer1 = pointer->next;
- }
- *list = pointer1;
- free(pointer);
- }
- void printList(nodePointer leading)
- {
- nodePointer pointer = leading;
- if (!pointer)
- {
- return;
- }
- while(pointer)
- {
- printf("%c\t", pointer->data);
- pointer = pointer->next;
- }
- printf("\n");
- for (pointer = leading; pointer; pointer = pointer->next)
- {
- printf("%d\t", pointer->index);
- }
- printf("\n");
- }
Add Comment
Please, Sign In to add comment