1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

basic linked lists(singly) code in c

Discussion in 'C' started by dass, Aug 31, 2007.

  1. dass

    dass New Member

    Joined:
    Aug 31, 2007
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    0
    Basic linked lists(singly) code in c

    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<malloc.h>
    void insertafter(struct node ** ,int ,int);
    void insertatbeg(struct node ** ,int );
    void add(struct node ** ,int);
    void search(struct node **,int);
    void del(struct node ** ,int);
    void count(struct node * );
    void display(struct node *);
    void auxsearch(struct node ** , int );
    void revtraverse(struct node **);
    struct node
    {
    	int data;
    	struct node *link;
    };
    void main()
    {
    	int elmt,choice,pos,num;
    	char wish;
    	struct node *p;
    	clrscr();
    	p=NULL;
    	printf("\t\t\tmenu\n\n");
    	printf("1.Add element\n2.Display elements\n3.Count of nodes\n4.Insert at begginning\n5.Insert at middle\n6.Insert at end\n7.Delete the element\n8.Search an element\n9.auxiliary search\n10.reverse list\n");
    	do
    	{
    		printf("\nenter the choice\t");
    		scanf("%d",&choice);
    		
    		switch(choice)
    		{
    		case 1:
    		case 6:
    			printf("enter the element \t");
    			scanf("%d",&elmt);
    			add(&p,elmt);
    			break;
    		case 2:
    			display(p);
    			break;
    		case 3:
    			count(p);
    			break;
    		case 4:
    			printf("\nenter the element to be inserted\t");
    			scanf("%d",&num);
    			insertatbeg(&p,num);
    			break;
    		case 5:
    			printf("\nenter the position to insert\t");
    			scanf("%d",&pos);
    			pos--;
    			printf("enter the element to insert\t");
    			scanf("%d",&num);
    			insertafter(&p,pos,num);
    			break;
    		case 7:
    			printf("\nenter the element to be deleted\t");
    			scanf("%d",&num);
    			del(&p,num);
    			break;
    		case 8:
    			printf("\nenter the element to search\t");
    			scanf("%d",&num);
    			search(&p,num);
    			break;
    		case 9:
    			printf("\nenter the element to search\t");
    			scanf("%d",&num);
    			auxsearch(&p,num);
    			break;
    		case 10:
    			printf("\nafter reversing...\n");
    			revtraverse(&p);
    			display(p);
    			break;
    		}
    		printf("\ndo you want to continue? {y/n} \t");
    		wish=getche();
    	}while(wish=='y' || wish =='Y');
    	getch();
    }
    
    void add(struct node **q ,int num)
    {
    	struct node *temp,*r;
    	temp=*q;
    	if(*q==NULL)
    	{
    		temp=malloc(sizeof(struct node));
    		temp->data=num;
    		temp->link=NULL;
    		*q=temp;
    	}
    	else
    	{
    		temp=*q;
    		while(temp->link!=NULL)
    			temp=temp->link;
    		r=malloc(sizeof(struct node));
    		r->data=num;
    		r->link=NULL;
    		temp->link=r;
    	}
    }
    
    void display(struct node *q )
    {
    	if(q == NULL)
    		printf("\nNo elements in the list...");
    	else
    	{
    		printf("\nthe elements in the list are\t");
    		while(q!=NULL)
    		{
    			printf("\n %d",q->data);
    			q=q->link;
    		}
    	}
    	
    }
    
    void count(struct node *q )
    {  int c=0;
    
    while(q!=NULL)
    {
    	q=q->link;
    	c++;
    }
    printf("the number of nodes is %d\t",c);
    }
    
    void insertafter(struct node**q ,int pos,int num)
    {
    	struct node *temp,*r;
    	int i;
    	temp=*q;
    	for(i=0;i<pos;i++)
    		temp=temp->link;
    	if(temp==NULL)
    	{
    		printf("there are less than %d elements in list\n",pos);
    		return;
    	}
    	r=malloc(sizeof(struct node));
    	r->data=num;
    	r->link=temp->link;
    	temp->link=r;
    	
    }
    
    void insertatbeg(struct node **q ,int num)
    {
    	struct node *temp;
    	temp=malloc(sizeof(struct node));
    	temp->data = num;
    	temp->link = *q;
    	*q=temp;
    }
    
    void del(struct node **q ,int num)
    {
    	struct node *old,*temp;
    	temp=*q;
    	while(temp!=NULL)
    	{
    		if(temp->data == num)
    		{
    			if(temp==*q)
    			{
    				*q=temp->link;
    				free(temp);
    				return;
    			}
    			else
    			{
    				old->link=temp->link;
    				free(temp);
    				return;
    			}
    		}
    		else
    		{
    			old=temp;
    			temp=temp->link;
    		}
    	}
    	printf("\n element not found in list\n");
    }
    
    void search(struct node **q,int num)
    {
    	int flag=0,c=0;
    	struct node *temp;
    	temp=*q;
    	
    	while(temp != NULL)
    	{
    		if(temp->data == num)
    			flag=1;
    		temp=temp->link;
    		c++;
    	}
    	if(flag)
    		printf("\nelement found");
    	else
    		printf("\nno such element ");
    }
    
    void auxsearch(struct node **q , int num)
    {
    	int flag=0;
    	struct node *temp;
    	temp=*q;
    	while(temp->link != NULL)
    	{
    		if(temp->link->data == num)
    		{
    			flag=1;
    			printf("\nthe elmt is %d",temp->link->data);
    			printf("\nthe prior elmt is %d",temp->data);
    			break;
    		}
    		temp=temp->link;
    	}
    	if(flag==0)
    		printf("\nno such element");
    }
    
    void revtraverse(struct node **q)
    {
    	struct node *r,*temp,*s;
    	temp=*q;
    	r=NULL;
    	while(temp != NULL)
    	{
    		s=r;
    		r=temp;
    		temp=temp->link;
    		r -> link=s;
    		
    	}
    	*q=r;
    }
     
    Last edited by a moderator: Aug 31, 2007
  2. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,287
    Likes Received:
    364
    Trophy Points:
    83
    Whats your query here? I see it does not compile in MS VC 6 and you need to type cast the memory allocated using the malloc by giving the (struct node*)
     

Share This Page