- #1
gruba
- 206
- 1
Homework Statement
I need to create data structure which contains three linked lists that are connected to one root node.
Homework Equations
-Data structures
The Attempt at a Solution
I can't find what is wrong with the following code:
Code:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
struct node *next;
int y;
}NODE;
typedef struct root
{
struct node *first;
struct node *middle;
struct node *last;
int x;
}ROOT;
ROOT *form_root(int x)
{
ROOT *new_root=(ROOT *)malloc(sizeof(ROOT));
new_root->first=new_root->middle=new_root->last=0;
new_root->x=x;
return new_root;
}
void add_in_list(NODE *list,int y)
{
NODE *new_node=(NODE *)malloc(sizeof(NODE));
new_node->y=y;
new_node->next=NULL;
if(list == 0)
list=new_node;
else
return ;
}
ROOT *add(ROOT *root,int x)
{
if(root==0)
return form_root(x);
if(x < root->x)
add_in_list(root->first,x);
else
if(x > root->x)
add_in_list(root->last,x);
else
add_in_list(root->middle,x);
return root;
}
int erase_from_list_(NODE *node,int y)
{
NODE *p=node->next;
if(p==0)
return 0;
node->y=p->y;
node->next=p->next;
free(p);
return 1;
}
ROOT *erase(ROOT *root, int x)
{
if(root==0)
return 0;
else if(x < root->x)
root->first=erase_from_list_(root->first,x);
else if(x > root->x)
root->last=erase_from_list_(root->last,x);
else if(x==root->x)
root->middle=erase_from_list_(root->middle,x);
else
return 0;
return root;
}
void sort_list(NODE *head)
{
for(;head && head->next;head=head->next)
{
NODE *min=head,*p;
for(p=head->next;p;p=p->next)
if(min->y > p->y)
min=p;
if(min!=head)
{
int temp=head->y;
head->y=min->y;
min->y=temp;
}
}
}
void sort(ROOT *root)
{
sort_list(root->first);
sort_list(root->middle);
sort_list(root->last);
}
void print_list(NODE *head)
{
while(head)
{
printf("%d",head->y);
head=head->next;
}
}
void print(ROOT *root)
{
print_list(root->first);
print_list(root->middle);
print_list(root->last);
}
int main()
{
ROOT *root=0;
int array[][3]={{0,1,2},{3,4,5},{12,7,8}};
int i;
for(i=0;i<3;i++)
root=add(root,*array[i]);
int num;
printf("enter the number to be removed:");
scanf("%d",&num);
root=erase(root,num);
sort(root);
NODE *head=0;
print(head);
return 0;
}
Could someone help?