0

1. Write a C program to read a list of books from a file and create a linked list to store them. The purpose of this program is to keep track of the books kept in a shelf. The shelf is a three-tier shelf and each tier can store up to 4500 pages maximum. The books are kept in alphabetical order (ascending).


I have done my source code but i do not know is this correct ?pls help me correct if there is any error

Attachments
# include<stdio.h>
# include<conio.h>
# include "malloc.h"
struct node
{
int data;
struct node *link;
};

void main()
{
int a=111,b=2,c=3,will,wish,num;
struct node *ptr,*ptr2,*result,*temp;
void add(struct node **,int );
struct node * search(struct node *);
void display(struct node *);
void invert(struct node *);
void del(struct node *,int);
struct node * concat(struct node *,struct node *);
ptr=NULL;
ptr2=NULL;
result=NULL;		//result for storing the result of concatenation
clrscr();
will=1;

while(will==1)
{
printf("

		Main Menu 
1. Add element
2.Delete element
3.Search element
4Linked List concatenation
5.Invert linked list
6. Display elements 
		Please enter the choice");
scanf("%d",&wish);
switch(wish)
{
case 1:
	printf("
Enter the element you want to add   ");
	scanf("%d",&num);
	add(&ptr,num);
	display(ptr);
	break;
case 2:
	printf("
Enter the element to delete ");
	scanf("%d",&num);
	del(ptr,num);
	break;
case 3:
	printf("
 Now demonstrating search ");
	temp = search(ptr);
	printf("
Address of first occurence is  %u ",temp);
	break;
case 4:
	/* Inputs given internally for demo only */
	printf(" Now demonstrating linked list concatenation
 Press any key to continue...");
	add(&ptr2,2);
	add(&ptr2,4);
	add(&ptr2,6);
	getch();
	printf("

 Displaying second Linked List


");
	display(ptr2);
	getch();
	result = concat(ptr,ptr2);
	clrscr();
	printf("



Now Displaying the result of concatenation");
	display(result);
	getch();
	break;
case 5:

	printf("
 Inverting the list ...
Press any key to continue...");
	invert(ptr);
	break;
case 6:
	display(ptr);
	break;
default:
	printf("

 Illegal choice

");
}
printf("
 DO you want to continue ( press 1 for yes ");
scanf("%d",&will);
}	//end of while
}


void add(struct node **q,int num)
{
struct node *temp;
temp = *q;
if(*q==NULL)
{
	*q=malloc(sizeof(struct node));
	temp = *q;
}
else
{
	while((temp->link)!=NULL)
	{
		temp=temp->link;
	}
	temp->link = malloc(sizeof(struct node));
	temp=temp->link;
}
temp->data = num;
temp->link  = NULL;
}

void display(struct node *pt)
{

while(pt!=NULL)
{

	printf("

 Data : %d",pt->data);
	printf("
 Link : %d",pt->link);
	pt=pt->link;
}
}


void invert(struct node *ptr)
{

struct node  *p,*q,*r;
p=ptr;
q=NULL;

while(p!=NULL)
{
	r=q;
	q=p;
	p=p->link;
	q->link=r;
}
ptr = q;
display(ptr);
}


//	CONCATENATION OF LINKED LISTS

struct node * concat(struct node *p,struct node *q)
{
struct node *x,*r;


if (p==NULL)
r=q;

if (q==NULL)
r=p;
else
{
      x=p;
      r=x;
      while(x->link!=NULL)
	 x=x->link;
      x->link=q;
}
    return(r);
}


// SEARCHING AN ELEMENT IN THE LINKED LIST
// THIS FUNCTION FINDS THE FIRST OCCURENCE OF
// A DATA AND RETURNS A POINTER TO ITS ADDRESS

struct node * search(struct node *p)
{
struct node *temp;
int num;
temp = p;
printf("
 Enter the data that you want to search    ");
scanf("%d",&num);
printf(" 
 Link of temp %u", temp->link);
while(temp->link!=NULL)
	{
	printf(" 
 In while ");
	if(temp->data == num)
	return(temp);
	temp=temp->link;
	}
return(NULL);
}



// DELETING DATA FROM THE LINKED LIST//

void del(struct node *p,int num)
{

struct node *temp,*x;
temp=p;
x= NULL;

while (temp->link !=NULL)
{
if(temp->data == num)
{
	if (x==NULL)
	{
	p = temp->link;
	free(temp);
	return;
	}
	else
	{
	x->link = temp->link;
	free(temp);
	return;
	}
}                  //end of outer if
x=temp;
temp=temp->link;
}	//end of while
printf(" 

No such entry to delete ");
}	//end of fn.
2
Contributors
2
Replies
3
Views
8 Years
Discussion Span
Last Post by funjoke88
0

1. Write a C program to read a list of books from a file and create a linked list to store them. The purpose of this program is to keep track of the books kept in a shelf. The shelf is a three-tier shelf and each tier can store up to 4500 pages maximum. The books are kept in alphabetical order (ascending).


I have done my source code but i do not know is this correct ?pls help me correct if there is any error

i saw your source code. Is it working? If so whats the point in asking. If not where is it going wrong? Which function?
According to me , since you are passing the address of ptr in add function , ptr gets incremented after additions and on successive calls to display , displays the books from that point onwards . there is no code for it to display from the start . the same problem occurs with delete. check it out and let me know.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.