ulvis.paste.net

Paste Search Dynamic
Recent pastes
linkedlist
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<stdbool.h>
  4. #include<limits.h>
  5.  
  6. int max=INT_MIN;
  7. int min=INT_MAX;
  8.  
  9. typedef struct node{
  10.     int data;
  11.     struct node* next;
  12. }node_t;
  13.  
  14. typedef struct linkedlist{
  15.     node_t* head;
  16.     node_t* tail;
  17. }linkedlist_t;
  18.  
  19. bool empty(linkedlist_t* lk){
  20.     return (lk->head == null);
  21. }
  22.  
  23. void pushempty(int val, linkedlist_t* lk){
  24.     node_t* kotak=(node_t*)malloc(sizeof(node_t));
  25.     kotak->data=val;
  26.     kotak->next=null;
  27.     lk->head=kotak;
  28.     lk->tail=kotak;
  29.     max=min=val;
  30. }
  31.  
  32. void push(int val, linkedlist_t* lk){
  33.     if(empty(lk)) pushempty(val,lk);
  34.     else{
  35.         node_t* kotak=(node_t*)malloc(sizeof(node_t));
  36.         kotak->data=val;
  37.         kotak->next=null;
  38.         kotak->next=lk->head;
  39.         lk->head=kotak;
  40.         if(max<val) max=val;
  41.         if(min>val) min=val;
  42.     }
  43. }
  44.  
  45. void searchMax(linkedlist_t* lk){
  46.     if(lk->head==lk->tail) return;
  47.     node_t* ptr=lk->head->next;
  48.     int temp=INT_MIN;
  49.     while(ptr!=null){
  50.         if(ptr->data > temp) temp=ptr->data;
  51.         ptr=ptr->next;
  52.     }
  53.     max=temp;
  54. }
  55.  
  56. void searchMin(linkedlist_t* lk){
  57.     if(lk->head==lk->tail) return;
  58.     node_t* ptr=lk->head->next;
  59.     int temp=INT_MAX;
  60.     while(ptr!=null){
  61.         if(ptr->data < temp) temp=ptr->data;
  62.         ptr=ptr->next;
  63.     }
  64.     min=temp;
  65.     return;
  66. }
  67.  
  68. void all(linkedlist_t* lk){
  69.     node_t* tmp = lk->head;
  70.     printf("data : ");
  71.     while(tmp != null){
  72.     printf("%d ",tmp->data);
  73.     tmp=tmp->next;
  74.     }
  75.     printf("\n");
  76.     return;
  77. }
  78.  
  79. void pop(linkedlist_t* lk){
  80.     if(empty(lk)) return;
  81.     if(lk->head==lk->tail){
  82.         free(lk->head);
  83.         lk->head=null;
  84.         lk->tail=null;
  85.         return;
  86.     }
  87.     node_t* temp=lk->head;
  88.     if(temp->data == max) searchMax(lk);
  89.     else if(temp->data == min) searchMin(lk);
  90.     lk->head=lk->head->next;
  91.     free(temp);
  92.     return;
  93. }
  94.  
  95. int top(linkedlist_t* lk){
  96.     if(!empty(lk))
  97.         return lk->head->data;
  98. }
  99.  
  100. int main(){
  101. //    int input;
  102.     char coba[10];
  103.     linkedlist_t myLL;
  104.     myLL.head=null;
  105.     myLL.tail=null;
  106.     while(scanf("%s",coba)!=EOF){
  107.         if(coba[0]=='B'){
  108.             pop(&myLL);
  109.             if(!empty(&myLL))printf("%d\n-",max);
  110.         }
  111.         else if(coba[0]=='M'){
  112.             if(!empty(&myLL)) printf("%d\n-",min);
  113.         }
  114.         else{
  115.             int temp=0,i;
  116.             for(i=0; coba[i]!='\0';i++){
  117.                 temp*=10;
  118.                 temp+=(int)coba[i]-48;
  119.             }
  120.             push(temp,&myLL);
  121.             printf("%d\n-",max);
  122.         }
  123.         all(&myLL);
  124.     }
  125.     return 0;
  126. }
  127.  
Parsed in 0.019 seconds