affiliate marketing

Saturday 17 December 2011

SYMBOL TABLE


SYMBOL TABLE
AIM
To write a program in C to implement symbol table.
ALGORITHM
1.Create a structure having member variable and values
2.Display the option and get choice from the user
3.I f choice 1 call create()
4.If choice 2 call insert()
5.If choice 3 call modify()
6.If choice 4 call search()
7.If choice 5 call display()
8.Exit
9.create()
                Do till less than 3
                Get input from the user for variables and values
10.insert()
                Get number of records to insert.
                a.Do till i is less than sum of I and number of records to insert.
                b.Get input for symbol name and value
11.modify()
                Get record or symbol name to modify
                If it is equal to  any symbol name then print “record found”
                Else print “record not found”
                Get the value for corresponding symbol name
12.search()
                Get the symbol name to modify
If it is present in table then print “record found”
Else print “record not found”
Get the value for corresponding symbol name
13.display()
                Do till k is less than tottal number of records.
                Print the symbil name and values.


PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<string.h>
#include<stdlib.h>
#define NULL 0
int size=0;
void Insert();
void Display();
void Delete();
int search(char lab[]);
void Modify();

struct symbtab
 {
  char label[10],symbol[10];
  int addr;
  struct symbtab *next;
 };

struct symbtab *first,*last;

void main()
 {
  int op,y;
  char la[10];
  clrscr();

   do
    {
      printf("\n\tSYMBOL TABLE IMPLEMENTATION\n");
      printf("\n\t1.INSERT\n\t2.DISPLAY\n\t3.DELETE\n\t4.SEARCH\n\t5.MODIFY\n\t6.END\n");
      printf("\n\tEnter your option:");
      scanf("%d",&op);

      switch(op)
       {
                 case 1:
                 Insert();
                 break;
                 case 2:
                 Display();
                 break;
                 case 3:
                 Delete();
                 break;
                 case 4:
                 printf("\n\tEnter the label to be searched:");
                 scanf("%s",la);
                 y=search(la);
                 printf("\n\tsearch Result:");
                 if(y==1)
                 printf("\n\tThe label is present in the symbol table\n");
                 else
                 printf("\n\tThe label is not present in the symbol table\n");
                 break;
                 case 5:
                 Modify();
                 break;
                 case 6:
                 exit(0);
       }
    }
   while(op<6);
   getch();
 }

void Insert()
 {
  int n;
  char l[10];
  printf("\n\tEnter the label:");
  scanf("%s",l);
  n=search(l);
  if(n==1)
  printf("\n\tThe label exists already in tha symbol table\n\tDuplicate can't be inserted");
  else
   {
     struct symbtab *p;
     p=malloc(sizeof(struct symbtab));
     strcpy(p->label,l);
     printf("\n\tEnter the symbol:");
     scanf("%s",p->symbol);
     printf("\n\tEnter the address:");
     scanf("%d",&p->addr);
     p->next=NULL;
     if(size==0)
      {
                first=p;
                last=p;
      }
     else
      {
                last->next=p;
                last=p;
      }
     size++;
   }
  printf("\n\tLabel inserted\n");
 }

void Display()
 {
  int i;
  struct symbtab *p;
  p=first;
  printf("\n\tLABEL\t\tSYMBOL\t\tADDRESS\n");
  for(i=0;i<size;i++)
   {
     printf("\t%s\t\t%s\t\t%d\n",p->label,p->symbol,p->addr);
     p=p->next;
   }
 }

int search(char lab[])
 {
  int i,flag=0;
  struct symbtab *p;
  p=first;
  for(i=0;i<size;i++)
   {
     if(strcmp(p->label,lab)==0)
     flag=1;
     p=p->next;
   }
  return flag;
 }

void Modify()
 {
  char l[10],nl[10];
  int add,choice,i,s;
  struct symbtab *p;
  p=first;
  printf("\n\tWhat do you want to modify ?\n");
  printf("\n\t1.Only the label\n\t2.Only the address\n\t3.Both the label and address");
  printf("\n\tEnter your choice:");
  scanf("%d",&choice);
  switch(choice)
   {
     case 1:
     printf("\n\tEnter the old label:");
     scanf("%s",l);
     s=search(l);
     if(s==0)
     printf("\n\tLabel not found");
     else
      {
                printf("\n\tEnter the new label:");
                scanf("%s",nl);
                for(i=0;i<size;i++)
                 {
                   if(strcmp(p->label,l)==0)
                   strcpy(p->label,nl);
                   p=p->next;
                 }
                printf("\n\tAfter modification:");
                Display();
      }
     break;
     case 2:
     printf("\n\tEnter the label where the address is to be modified:");
     scanf("%s",l);
     s=search(l);
     if(s==0)
     printf("\n\tLable not found\n");
     else
      {
                printf("\n\tEnter the new address:");
                scanf("%d",&add);
                for(i=0;i<size;i++)
                 {
                   if (strcmp(p->label,l)==0)
                   p->addr=add;
                   p=p->next;
                 }
                printf("\n\tAfter modification:\n");
                Display();
      }
     break;
     case 3:
     printf("\n\tEnter the old label:");
     scanf("%s",l);
     s=search(l);
     if(s==0)
     printf("\n\tLabel not found");
     else
      {
                printf("\n\tEnter the new label:");
                scanf("%s",nl);
                printf("\n\tEnter the new address:");
                scanf("%d",&add);
                for(i=0;i<size;i++)
                 {
                   if(strcmp(p=p->label,l)==0)
                    {
                      strcpy(p->label,nl);
                      p->addr=add;
                    }
                   p=p->next;
                 }
                printf("\n\tAfter modification:\n");
                Display();
      }
     break;
   }
 }

void Delete()
 {
   int a;
   char l[10];
   struct symbtab *p,*q;
   p=first;
   printf("\n\tEnter the label to be deleted:");
   scanf("%s",l);
   a=search(l);
   if(a==0)
   printf("\n\tLabel not found");
   else
    {
      if(strcmp(first->label,l)==0)
      first=first->next;
      else if(strcmp(last->label,l)==0)
       {
                 q=p->next;
                 while(strcmp(q->label,l)!=0)
                  {
                    p=p->next;
                    q=q->next;
                  }
                 p->next=NULL;
                 last=p;
       }
      else
       {
                 q=p->next;
                 while(strcmp(q->label,l)!=0)
                  {
                    p=p->next;
                    q=q->next;
                  }
                 p->next=q->next;
       }
      size--;
      printf("\n\tAfter Deletion:\n");
      Display();
    }
 }
OUTPUT :



RESULT
Thus the program for symbol table has been implemented successfully.

1 comment: