用链表写的一个队列

以下是最近用链表写的一个队列,包括创建,入队,出队,打印等功能

/**
  * @filename linkqueue.c
  * @author   haohaibo  
  * @data	  2017/4/12
  * @brief 	  用链表实现一个队列
**/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int type_t;

typedef struct node{
	type_t data;
	struct node *Next;
}lqn_t;

typedef struct linkqueue_p{
	lqn_t *front;
	lqn_t *real;
	int count;
}lq_t;

/**
  * @brief 创建一个队列
 */
lq_t *linkqueue_creat()
{
	lq_t *lq=(lq_t *)malloc(sizeof(lq_t));
	lqn_t *n=(lqn_t *)malloc(sizeof(lqn_t));
	if(NULL==lq)
	{
		printf(__FUNCTION__);
		printf("error in line %d.\n",__LINE__);
		return (lq_t*)-1;
	}
	n->data=0;
	n->Next=NULL;
	lq->front=n;
	lq->real=n;
	lq->count =0;
	return lq;
}

/**
  * @brief 入列
 */
int linkqueue_in(lq_t *lq,type_t value)
{
	lqn_t *n=(lqn_t *)malloc(sizeof(lqn_t));
	if(NULL==n)
	{
		printf(__FUNCTION__);
		printf("error in line %d.\n",__LINE__);
		return -1;
	}
	
	n->data=value;
	n->Next=NULL;
	lq->real->Next=n;
	lq->real=n;
	lq->count++;
	return 0;
}

/**
  * @brief 出列
 */
type_t linkqueue_out(lq_t *lq)
{
	lqn_t *n;
	type_t value;
	if(lq->real==lq->front)
	{
		puts("error ");
		exit(1);
	}
	n=lq->front->Next;
	value=n->data;
	lq->front->Next=n->Next;
	if(lq->real==n)
	lq->real=lq->front;
	free(n);
	n=NULL;
	lq->count--;
	return value;
}

/**
  * @brief 全部元素出列
 */
int linkqueue_outall(lq_t *lq)
{
	int i=lq->count;
	if(lq->real==lq->front)
	{
		puts("error ");
		exit(1);
	}
	while(i--)
	linkqueue_out(lq);
}

/**
  * @brief 打印队列元素
 */
int linkqueue_show(lq_t *lq)
{
	lqn_t *p;
	p=lq->front;
	while(lq->front->Next!=NULL)
	{
		printf("%d ",lq->front->Next->data);
		lq->front=lq->front->Next;
	}
	lq->front=p;
	putchar(10);
	return 0;
}

int main(void)
{
	lq_t * lq1;
	lq1=linkqueue_creat();
	linkqueue_in(lq1,100);
	linkqueue_in(lq1,200);
	linkqueue_in(lq1,300);
	linkqueue_in(lq1,400);
	linkqueue_in(lq1,500);
	linkqueue_show(lq1);
	//printf("lq->count=%d.\n",lq1->count);
	/*printf("out data is %d.\n",linkqueue_out(lq1));
	printf("out data is %d.\n",linkqueue_out(lq1));
	printf("out data is %d.\n",linkqueue_out(lq1));
	printf("out data is %d.\n",linkqueue_out(lq1));
	printf("out data is %d.\n",linkqueue_out(lq1));
	printf("out data is %d.\n",linkqueue_out(lq1));*/
	linkqueue_outall(lq1);
	
	linkqueue_in(lq1,500);
	linkqueue_show(lq1);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值