环境:gcc

目的:链式队列练习

功能:

1. 建立链式队列

2. 判空

4. 入队列

5. 出队列

 链式队列

/*************************************************************************

 @Author: wanghao

 @Created Time : Thu 10 May 2018 07:31:27 PMPDT

 @File Name: linkqueue.c

 @Description:

 ************************************************************************/

#include <stdio.h>

#include <stdlib.h>

 

typedef int data_t;

 

typedef struct node_t

{

       data_tdata;

       structnode_t *next;

}Node;

 

typedef struct queue_t

{

       structnode_t *front;

       structnode_t *rear;

}Queue;

 

Node *create_node(void)

{

       Node*node = NULL;

 

       node= (Node *)malloc(sizeof(Node));

       if(!node)

       {

              printf("Mallocnode fail!\n");

              return NULL;

       }

 

       node->data= 0;

       node->next= NULL;

 

       return node;

}

 

Queue *create_queue(void)

{

       Queue*queue = NULL;

 

       queue= (Queue *)malloc(sizeof(Queue));

       if(!queue)

       {

              printf("Malloc queue fail!\n");

              return NULL;

       }

 

       queue->front = NULL;

       queue->rear = NULL;

 

       return queue;

}

int empty_queue(Queue *queue)

{

       if(!queue)

       {

              printf("Queuedoes not exist!\n");

              return-1;

       }

 

       if(!(queue->front)&& !(queue->rear))

       {

              return 1;

       }

 

       return 0;

}

 

 

int in_queue(Queue *queue, data_t data)

{

       Node*newnode = NULL;

 

       if(!queue)

       {

              printf("Thequeue does not exist!\n");

              return-1;

       }

      

       newnode= create_node();

       if(!newnode)

       {

              printf("Createnew node fail!\n");

              return-2;

       }

 

       if(empty_queue(queue))

       {

 

              newnode->data= data;

              queue->front= newnode;

              queue->rear= newnode;

       }

       else

       {     

              newnode->data = data;

              newnode->next = queue->rear->next;

              queue->rear->next = newnode;

              queue->rear = newnode;

       }

}

 

int de_queue(Queue *queue, data_t *data)

{

       Node*node = NULL;

       Node *deletenode = NULL;

 

       if(!queue)

       {

              printf("Thequeue does not exist!\n");

              return-1;

       }

       if(empty_queue(queue))

       {

              printf("The queue is empty!\n");

              return -2;

       }

 

       deletenode= queue->front;

       if(queue->front == queue->rear)

       {

              queue->front= queue->rear = NULL;

       }

       else

       {

              queue->front = deletenode->next;

       }

 

       *data= deletenode->data;

       free(deletenode);

       deletenode= NULL;

 

       return 1;

}

int main(int argc, const char *argv[])

{

       inti;

       data_tdata;

       Queue*queue = NULL;

      

       queue= create_queue();

       if(queue== NULL)

       {

              return-1;

       }

 

       for(i= 0; i < 4; i++)

       {

              in_queue(queue,i+1);

       }

 

       for(i= 0; i < 5;i++)

       {

              de_queue(queue,&data);

              printf("%d\t",data);

       }

 

       printf("\n");

 

       return0;

}


相关文章: