链式队列

本文介绍了一种使用C语言实现的链式队列数据结构。主要内容包括创建链式队列、判断队列是否为空、元素入队及出队等基本操作。通过具体的代码示例展示了如何实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值