使用c中的链表实现队列



我正在尝试使用链表实现队列。我正在使用以下代码,但我的显示功能无法正常工作:

我的代码出了什么问题?

我的代码:

#include<stdio.h>
#include<stdlib.h>
struct node
{
    int info;
    struct node *link;
}*front=NULL,*rear=NULL;
void insert(int item);
int del();
int peek();
int isEmpty();
void display();
main()
{
    int choice,item;
    while(1)
    {       
        printf("1.Insertn");
        printf("2.Deleten");
        printf("3.Display the element at the frontn");
        printf("4.Display all elements of the queuen");
        printf("5.Quitn");
        printf("Enter your choice : ");
        scanf("%d", &choice);
        switch(choice)
        {
        case 1:
            printf("Input the element for adding in queue : ");
            scanf("%d",&item);
            insert(item);
            break;
        case 2:
            printf("Deleted element is  %dn",del());
            break;
        case 3:
            printf("Element at the front of the queue is %dn", peek() );
            break;
        case 4:
            display();
            break;
        case 5:
            exit(1);
        default :
            printf("Wrong choicen");
        }
    }
}
void insert(int item)
{
    struct node *tmp;
    tmp=(struct node *)malloc(sizeof(struct node));
    if(tmp==NULL)
    {
        printf("Memory not availablen");
        return;
    }
    tmp->info = item;
    tmp->link=NULL;
    if(front==NULL)      /*If Queue is empty*/
        front=tmp;
    rear=tmp;
}
int del()
{
    struct node *tmp;
    int item;
    if( isEmpty( ) )
    {
        printf("Queue Underflown");
        exit(1);
    }
    tmp=front;
    item=tmp->info;
    front=front->link;
    free(tmp);
    return item;
}
int peek()
{
    if( isEmpty( ) )
    {
        printf("Queue Underflown");
        exit(1);
    }
    return front->info;
}
int isEmpty()
{
    if(front==NULL)
        return 1;
    else
        return 0;
}
void display()
{
    struct node *ptr;
    ptr=front;
    if(isEmpty())
    {
        printf("Queue is emptyn");
        return;
    }
    printf("Queue elements :nn");
    while(ptr!=NULL)
    {
        printf("%d ",ptr->info);
        ptr=ptr->link;
    }
    printf("nn");
}

insert函数没有将新节点正确链接到列表中。您只需将尾部设置为指向新节点,但不会使上一个尾部节点链接指向新尾部。

将插入函数修改为:

if(front==NULL)      /*If Queue is empty*/
        front=tmp;
else
    rear->link = tmp;
/*The above statement would link the the previous node to the newly created node*/
    rear=tmp;
  Enqueue Algorithm :
   1. Create a newNode with data and address.
   2. if queue i.e front is empty   
    i.  front = newnode;   
    ii. rear  = newnode;
   3. Else 
   i.rear->next = newnode;    
   ii.rear = newnode;
 Dequeue Algorithm :
   1. if queue is i.e front is NULL      printf("nQueue is Empty n");
   2. Else next element turn into front        
   i.  struct node *temp = front ;  
   ii. front = front->next;   
   iii.free(temp);  

C编程实现:

   #include<stdio.h>
   #include<stdlib.h>
    struct node
    {
      int data;
      node *next;
    };
    node *front = NULL;
    node *rear =NULL;

    node *creation(int data)
    {
      tmp=(struct node *)malloc(sizeof(struct node));
      tmp->data = data;
      tmp->next=NULL;
      return tmp;
    }


     void Insert(int item)
     {
         struct node *newnode = creation(item);
       if(front==NULL)
       {
          front = rear = newnode;
       }
       else
       {
          rear->next = newnode;
          rear = newnode;
       }
  }


    void Delete()
    {
      struct node *temp;
      if (front == NULL)
      {
        printf("nQueue is Empty n");
        return;
      }
      else
      {
         temp = front;
         front = front->next;
         if(front == NULL)  rear = NULL;
         free(temp);
      }
   }

     void display()
     {
       struct node *temp=front;
      if(front == NULL) 
      {
        printf("Queue is Overflown");
      }
     else
     {
         printf("Queue is :n");
         while(temp != NULL)
         {
             printf("%d ", temp->data);
             temp = temp->next;
         }
     }
     printf("n");
   }

相关内容

  • 没有找到相关文章