环境: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;
}