Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define INPUT int
- struct element;
- struct stack;
- typedef struct element * POINTER;
- typedef struct stack * LIST;
- typedef struct element
- {
- INPUT data;
- POINTER next;
- } ELEMENT;
- typedef struct stack
- {
- POINTER head;
- POINTER size;
- };
- void insert (LIST list, INPUT input)
- {
- POINTER newElement = malloc(sizeof(ELEMENT));
- newElement->data = input;
- newElement->next = NULL;
- if (list->head==NULL)
- {
- list->head = newElement;
- list->size = newElement;
- } else
- {
- list->size->next = newElement;
- list->size = newElement;
- }
- }
- void showList(LIST list, int o){
- POINTER pom = list->head;
- int i = 1;
- printf("=============================\n");
- printf("Prikaz elemenata liste\n");
- printf("=============================\n");
- while (pom!=NULL)
- {
- if (o == 0)
- printf("\t%d.element liste je %d\n",i, pom->data);
- else
- printf("\t%d.element liste je %c\n",i, pom->data);
- i++;
- pom = pom->next;
- }
- printf("=============================\n");
- }
- int getNumber(int input, int number)
- {
- number = number * 10 + (input - 48);
- return number;
- }
- int popFirst (LIST list)
- {
- POINTER current;
- if (list->head==NULL)
- {
- printf("NE MOZE SE IZBACITI ELEMENT IZ LISTE ZATO STO JE LISTA PRAZNA");
- return 0;
- }
- printf("\nFIRSTIzbacuje se element %d\n", list->head->data);
- current = list->head;
- if (list->head == list->size)
- {
- list->head = NULL;
- list->size = NULL;
- return 0;
- }
- else
- {
- list->head = list->head->next;
- }
- free(current);
- return 1;
- }
- int popLast (LIST list)
- {
- POINTER current;
- if (list->head==NULL)
- {
- printf("NE MOZE SE IZBACITI ELEMENT IZ LISTE ZATO STO JE LISTA PRAZNA");
- return 0;
- }
- printf("\nLastIzbacuje se element %d\n", list->size->data);
- current = list->head;
- if (list->head == list->size)
- {
- list->head = NULL;
- list->size = NULL;
- }
- else
- {
- while(current->next != list->size)
- {
- current = current->next;
- }
- list->size = current;
- list->size->next = NULL;
- current = current->next;
- }
- free(current);
- return 1;
- }
- int popN(LIST list, POINTER kick, POINTER past){
- //POINTER current = list->head;
- //POINTER past = NULL;
- /*while(current!=NULL && current->data!=zadataVrednost)
- {
- past = current;
- current = current->next;
- }*/
- printf("usao 1 \n");
- if (kick==list->head)
- {
- printf("usao 2 \n");
- int checker;
- checker = popFirst (list);
- if (checker == 0) return 0;
- }
- else
- {
- printf("usao 3 \n");
- if (kick==list->size)
- {
- printf("usao 4 \n");
- return popLast (list);
- }
- else
- {
- printf("usao 5 \n");
- past->next = kick->next;
- free(kick);
- }
- }
- return 1;
- }
- void searchPriority (LIST numbers, LIST operators)
- {
- POINTER currentNumber, currentOperator, pastNumber, pastOperator;
- currentNumber = numbers->head;
- currentOperator = operators->head;
- pastNumber = numbers->head;
- pastOperator = operators->head;
- while(currentOperator!=NULL)
- {
- if (currentOperator->data == 42)
- {
- POINTER pastNumberCopy, pastOperatorCopy, currentNumberCopy, currentOperatorCopy;
- currentNumber->next->data = currentNumber->data * currentNumber->next->data;
- showList(numbers, 0);
- printf("aaaa\n");
- showList(operators, 1);
- if (currentNumber != numbers->head)
- pastNumberCopy = currentNumber;
- else
- {
- pastNumberCopy = currentNumber->next;
- numbers->head = currentNumber->next;
- }
- currentNumberCopy = currentNumber->next;
- printf("NUMBER >> prije izbacivanja: trenutni %d, prethodni %d\n", currentNumber->data, pastNumber->data);
- popN(numbers, currentNumber, pastNumber);
- //printf("poslije izbacivanja: trenutni %d, prethodni %d\n", currentNumber->data, pastNumber->data);
- pastNumber = pastNumberCopy;
- currentNumber = currentNumberCopy;
- printf("NUMBER >> poslije izbacivanja: trenutni %d, prethodni %d\n", currentNumber->data, pastNumber->data);
- if (currentOperator != operators->head)
- pastOperatorCopy = currentOperator;
- else
- {
- pastOperatorCopy = currentOperator->next;
- operators->head = currentOperator->next;
- }
- currentOperatorCopy = currentOperator->next;
- printf("OPERATOR >> prije izbacivanja: trenutni %d, prethodni %d\n", currentOperator->data, pastOperator->data);
- popN(operators, currentOperator, pastOperator);
- pastOperator = pastOperatorCopy;
- pastNumber = pastNumberCopy;
- printf("OPERATOR >> prije izbacivanja: trenutni %d, prethodni %d\n", currentOperator->data, pastOperator->data);
- printf("OPERATOR: \nglava %d\nrep %d", operators->head->data, operators->size->data);
- continue;
- }
- pastNumber = currentNumber;
- currentNumber = currentNumber->next;
- pastOperator = currentOperator;
- currentOperator = currentOperator->next;
- }
- }
- int main(void)
- {
- int number = 0;
- INPUT input;
- LIST numbers, operators;
- numbers = malloc (sizeof(LIST));
- numbers->head = NULL;
- numbers->size = NULL;
- operators = malloc (sizeof(LIST));
- operators->head = NULL;
- operators->size = NULL;
- do
- {
- //fflush(stdin);
- input = getchar();
- if (input == '\n')
- {
- insert (numbers, number);
- break;
- }
- if (input >=42 && input <= 47)
- {
- if (number != 0)
- {
- insert (numbers, number);
- number = 0;
- }
- insert (operators, input);
- }
- else
- {
- if (number == 0 && input == 48)
- insert (numbers, number);
- number = getNumber (input, number);
- }
- } while (input!='\n');
- showList(numbers, 0);
- showList(operators, 1);
- searchPriority (numbers, operators);
- showList(numbers, 0);
- showList(operators, 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement