Advertisement
salmancreation

Symbol Table in C Linked list

Oct 14th, 2017
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.47 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<conio.h>
  3.  
  4. #include<string.h>
  5. #define null 0
  6. int size=0;
  7. void insert();
  8. void del();
  9. int search(char lab[]);
  10. void modify();
  11. void display();
  12.  
  13. struct symbtab
  14. {
  15.     char label[10];
  16.     int addr;
  17.     struct symbtab *next;
  18. };
  19.  
  20. struct symbtab *first,*last;
  21.  
  22. void main()
  23. {
  24.         int op;
  25.         int y;
  26.         char la[10];
  27.         do
  28.         {
  29.             printf("\nSYMBOL TABLE IMPLEMENTATION\n");
  30.             printf("1.INSERT\n");
  31.             printf("2.DISPLAY\n");
  32.             printf("3.DELETE\n");
  33.             printf("4.SEARCH\n");
  34.             printf("5.MODIFY\n");
  35.             printf("6.END\n");
  36.             printf("\nEnter your option: ");
  37.             scanf("%d",&op);
  38.             switch(op)
  39.             {
  40.         case 1:
  41.                 insert();
  42.                 display();
  43.                 break;
  44.         case 2:
  45.                         display();
  46.                 break;
  47.         case 3:
  48.                 del();
  49.                 display();
  50.                         break;
  51.         case 4:
  52.                 printf("Enter the label to be searched: ");
  53.                 scanf("%s",la);
  54.                 y=search(la);
  55.                 if(y==1)
  56.                     printf("The label is already in the symbol table\n");
  57.                 else
  58.                      printf("The label is not found in the symbol tablel\n");
  59.                 break;
  60.         case 5:
  61.                 modify();
  62.                 display();
  63.                 break;
  64.         case 6:
  65.                 break;
  66.     }
  67.         }
  68.         while(op<6);
  69.         getch();
  70. }
  71.  
  72. void insert()
  73. {
  74.     int n;
  75.     char l[10];
  76.     printf("Enter the label: ");
  77.     scanf("%s",l);
  78.     n=search(l);
  79.     if(n==1)
  80.          printf("The label is already in the symbol table. Duplicate cant be inserted\n");
  81.     else
  82.      {
  83.         struct symbtab *p;
  84.         p=malloc(sizeof(struct symbtab));
  85.         strcpy(p->label,l);
  86.         printf("Enter the address: ");
  87.         scanf("%d",&p->addr);
  88.         p->next=null;
  89.         if(size==0)
  90.         {
  91.                         first=p;
  92.                         last=p;
  93.         }
  94.         else
  95.         {
  96.                         last->next=p;
  97.                         last=p;
  98.         }
  99.         size++;
  100.     }
  101. }
  102.  
  103. void display()
  104. {
  105.     int i;
  106.     struct symbtab *p;
  107.     p=first;
  108.     printf("\nLABEL\tADDRESS\n");
  109.     for(i=0;i<size;i++)
  110.     {
  111.                     printf("%s\t%d\n",p->label,p->addr);
  112.                     p=p->next;
  113.     }
  114. }
  115. int search(char lab[])
  116. {
  117.     int i,flag=0;
  118.     struct symbtab *p;
  119.     p=first;
  120.     for(i=0;i<size;i++)
  121.     {
  122.             if(strcmp(p->label,lab)==0)
  123.                   flag=1;
  124.              p=p->next;
  125.     }
  126.     return flag;
  127. }
  128.  
  129. void modify()
  130. {
  131.     char l[10],nl[10];
  132.     int add,choice,i,s;
  133.     struct symbtab *p;
  134.     p=first;
  135.     printf("What do you want to modify?\n");
  136.     printf("1.Only the label\n");
  137.     printf("2.Only the address of a particular label\n");
  138.     printf("3.Both the label and address\n");
  139.     printf("Enter your choice: ");
  140.     scanf("%d",&choice);
  141.     switch(choice)
  142.                 {
  143.         case 1:
  144.                 printf("Enter the old label\n");
  145.                 scanf("%s",l);
  146.                 printf("Enter the new label: ");
  147.                 scanf("%s",nl);
  148.                 s=search(l);
  149.                 if(s==0)
  150.                                 printf("\nNo such label");
  151.                 else
  152.                 {
  153.                                 for(i=0;i<size;i++)
  154.                                 {
  155.                                                 if(strcmp(p->label,l)==0)
  156.                                                 {
  157.                                                                 strcpy(p->label,nl);
  158.                                                 }
  159.                                                 p=p->next;
  160.                                 }
  161.                 }
  162.                 break;
  163.         case 2:
  164.                 printf("Enter the label whose address is to be modified: ");
  165.                 scanf("%s",l);
  166.                 printf("Enter the new address: ");
  167.                 scanf("%d",&add);
  168.                 s=search(l);
  169.                 if(s==0)
  170.                                 printf("\nNo such label");
  171.                 else
  172.                 {
  173.                                 for(i=0;i<size;i++)
  174.                                 {
  175.                                                 if(strcmp(p->label,l)==0)
  176.                                                 {
  177.                                                                 p->addr=add;
  178.                                                 }
  179.                                                 p=p->next;
  180.                                 }
  181.                 }
  182.                 break;
  183.         case 3:
  184.                 printf("Enter the old label: ");
  185.                 scanf("%s",l);
  186.                 printf("Enter the new label: ");
  187.                 scanf("%s",nl);
  188.                 printf("Enter the new address: ");
  189.                 scanf("%d",&add);
  190.                 s=search(l);
  191.                 if(s==0)
  192.                                 printf("\nNo such label");
  193.                 else
  194.                 {
  195.                   for(i=0;i<size;i++)
  196.                     {
  197.                      if(strcmp(p->label,l)==0)
  198.                        {
  199.                      strcpy(p->label,nl);
  200.                      p->addr=add;
  201.                             }
  202.                             p=p->next;
  203.                     }
  204.                 }
  205.                 break;
  206.          }
  207. }
  208.  
  209. void del()
  210. {
  211.     int a;
  212.     char l[10];
  213.     struct symbtab *p,*q;
  214.     p=first;
  215.     printf("Enter the label to be deleted: ");
  216.     scanf("%s",l);
  217.     a=search(l);
  218.     if(a==0)
  219.         printf("Label not found\n");
  220.         else
  221.         {
  222.             if(strcmp(first->label,l)==0)
  223.             first=first->next;
  224.                         else if(strcmp(last->label,l)==0)
  225.             {
  226.                      q=p->next;
  227.                      while(strcmp(q->label,l)!=0)
  228.                      {
  229.                        p=p->next;
  230.                         q=q->next;
  231.                     }
  232.                     p->next=null;
  233.                     last=p;
  234.                 }
  235.                 else
  236.                 {
  237.                      q=p->next;
  238.                      while(strcmp(q->label,l)!=0)
  239.                     {
  240.                  p=p->next;
  241.                  q=q->next;
  242.                 }
  243.               p->next=q->next;
  244.               }
  245.          size--;
  246.      }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement