#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct node{
  char data;
  int p;
  struct node *ptr;
};
struct node *start=NULL;
struct node *insert()
{
  struct node *new_node,*z;
  int num;
  char s;
  printf("\nEnter -1 to stop.");
  printf("\nEnter the characters and their priorities: ");
  scanf("\n%c %d",&s,&num);
  while(num!=-1)
  {
    new_node=(struct node *)malloc(sizeof(struct node));
    new_node->data=s;
    new_node->p=num;
    if(start==NULL)
    {
      start=new_node;
      z=start;
      new_node->ptr=NULL;
    }
    else
    {
      z->ptr=new_node;
      new_node->ptr=NULL;
      z=z->ptr;
    }
    scanf("%c %d",&s,&num);
  }
  return start;
}
struct node *display()
{
  struct node *z;
  z=start;
  printf("\nDisplaying elements:\n");
  while(z!=NULL)
  {
    printf("\t%c [Priority=%d]\n",z->data,z->p);
    z=z->ptr;
  }
  return start;
}
struct node *sortit()
{
  struct node *z,*q;
  int t;
  char x;
  z=start;
  while(z->ptr!=NULL)
  {
    q=z->ptr;
    while(q!=NULL)
    {
      if(z->p>q->p)
      {
        t=z->p;
        x=z->data;
        z->p=q->p;
        z->data=q->data;
        q->p=t;
        q->data=x;
      }
      q=q->ptr;
    }
    z=z->ptr;
  }
  return start;
}
struct node *new_insert()
{
  struct node *y,*z;
  int n;
  char s;
  y=(struct node *)malloc(sizeof(struct node));
  printf("\nEnter character and priority for new node:");
  scanf("%c %d",&s,&n);
  printf("%c",s);
  y->data=s;
  y->p=n;
  printf("%c",y->data);
  printf("%d",y->p);
  if(n<start->p)
  {
    y->ptr=start;
    start=y;
    printf("%d",y->p);
  }
  else
  {printf("\nff");
    z=start;
  while(z->ptr->p<=n&&z->ptr!=NULL)
    z=z->ptr;
  y->ptr=z->ptr;
  z->ptr=y;
}
  return start;
}
int main()
{
  insert();
  display();
  sortit();
  display();
  new_insert();
  display();
  return 0;
}
In this C code, I have tried to implement priority queues.
Everything works perfectly fine except the new_insert() function. The print statements after y->p=n; in new_insert() function print 0.
Hence, the function doesn't work properly. Also, in display() function the print statement prints the [Priority] twice.
Hence, I am not able to add an external node in my priority queue.
 
    