Algorithm to insert a value in ascending priority queue:
Let head be a pointer that stores the address of first node
step 1: Read the value and its priority
step 2: create a new node using
malloc function
step 3: Assign the value read to
the data field of newnode (newnode -> data =value)
and
newnode -> pri = priority
step 4: store the address of node
whose priority is > newnode priority in pointer c
step 5: store the address of node
before c in pointer p
step 5: newnode –> next =
p->next
step 6: p -> next = newnode
Program
#include<stdio.h>
#include <stdlib.h>
struct node
{
int data,pri;
struct node *next;
};
struct node *head=NULL,*c,*p;
void create();
void display();
main()
{
int n,i;
printf("enter the number of elements");
scanf("%d",&n);
for(i=1;i<=n;i++)
create();
display();
}
void create()
{
int v,priority;
printf("enter value and priority\n");
scanf("%d%d",&v,&priority);
struct node *newnode = (struct node *)malloc(sizeof(struct node));
newnode->data =v;
newnode->pri=priority;
newnode->next = NULL;
if(head == NULL)
head = newnode;
else if( newnode->pri < head->pri)
{
newnode->next=head;
head=newnode;
}
else
{
c=head;
while(newnode->pri >=c->pri && c->next != NULL)
{
p=c;
c=c->next;
}
if(c->next == NULL && newnode->pri >= c->pri)
{
c->next = newnode;
}
else
{
p->next=newnode;
newnode->next=c;
}
}
}
void display()
{
if(head == NULL)
printf("list is empty");
else
{
c=head;
while(c != NULL)
{
printf("%d %d->",c->data,c->pri);
c=c->next;
}
}
}
No comments:
Post a Comment