链队列

#include <stdio.h>
#include <stdlib.h>
typedef struct linkqueue
{
   int elem;
   struct linkqueue *next;
}qnode,*qnodes;
typedef struct node
{
   qnodes front;
   qnodes rear;
}nodes,*nodel;
struct node *init(struct linkqueue *lq)
{    
   struct node *ndd;
   qnodes head;
   lq=(qnodes)malloc(sizeof(qnode));
   ndd=(nodel)malloc(sizeof(nodes));
   ndd->front=lq;
   ndd->rear=lq;
   if(ndd->front==NULL)
   {
       printf("error");
       exit (0);
   }
   lq->next=NULL;
//    lq->elem=1;
   //ndd->front->next=NULL;
   //ndd->front->elem=100;
   printf("ok\n");
   return ndd;
}
void push( struct node *nda,int data)
{
   qnodes p;
   p=(qnodes)malloc(sizeof(qnode));
   p->elem=data;
   nda->rear->next=p;
   nda->rear=p;
   p->next=NULL;
   printf("%d has push.\n",data);
}
void pop(struct node *ndb)
{
   qnodes h;
   int x;
   if(ndb->front==ndb->rear)
   {
       printf("the queue is empty\n");
       exit (0);
   }
   h=ndb->front->next;
   ndb->front->next=h->next;
   x=h->elem;
   free(h);
   printf("%d has pop.\n",x);
}
void isempty(struct node *ndc)
{
   if(ndc->front==ndc->rear)
       printf("the queue is empty\n");
   else
       printf("the queue isn't empty\n");
}
void destroy(struct node *nde)
{
   while(nde->front)
   {
   nde->rear=nde->front->next;
   free(nde->front);
   nde->front=nde->rear;
   }
   printf("the queue has destroy\n");
}
main()
{
   struct linkqueue *lq;
   struct node *nd;

   nd=init(lq);

   push(nd,5);
   push(nd,6);
   push(nd,7);
   push(nd,8);
   pop(nd);
   pop(nd);
   isempty(nd);
   destroy(nd);
}

你可能感兴趣的:(队列,链)