链式队列的基本功能实现

队的特点是先进先出,上一篇已经说过队的顺序存储,本文用链表来实现队列的特性功能。

在使用链表时,不用考虑由于假 队满使用循环队列的情况了。

故队列特性功能包括:创建、入队、出队、队空、以及打印。

首先定义队的节点,然后还需要 front 和rear 使出队和入队更易操作。具体定义如下:

typedef struct linkqueuenode{   //定义链式队列的结点类型
	datatype data;
	struct linkqueuenode *next;
}linkqueue_node,*linkqueue_pnode;

typedef struct linkqueue{   //将front 和 rear 封装成指针
	linkqueue_pnode front,rear;
}link_queue,*link_pqueue;

功能实现代码如下:

void init_linkqueue(link_pqueue * Q)  //创建队列
{
	if((*Q = (link_pqueue)malloc(sizeof(link_queue))) == NULL)
	{
		printf("malloc failed!\n");
		return ;
	}
	
	if(((*Q)->front = (linkqueue_pnode)malloc(sizeof(linkqueue_node)))== NULL)
	{
		printf("malloc failed!\n");
		return ;
	}
	(*Q)->front->next = NULL;
	(*Q)->rear = (*Q)->front;
}

bool in_linkqueue(datatype data,link_pqueue q) //入队
{
	linkqueue_pnode new;
	if((new = (linkqueue_pnode)malloc(sizeof(linkqueue_node)))== NULL)
	{
		printf("malloc failed!\n");
		return false;
	}
	new->data = data;
	new->next = q->rear->next;  //尾部插入
	q->rear->next = new;
	
	q->rear = q->rear->next;
	return true;
	
}

bool is_empty_linkqueue(link_pqueue q)   //队空
{
	if(q->rear == q->front)
		return true;
	else 
		return false;
}

bool out_linkqueue(link_pqueue q,datatype *D)  //出队
{
	linkqueue_pnode t;
	if(is_empty_linkqueue(q)){            //判断是否为空
		printf("队列已经空\n");
		return false;
	}
	//队列非空出队
	t = q->front;
	q->front = q->front->next;
	*D = q->front->data;
	free(t);	
	return true;	
}

void show_linkqueue(link_pqueue q) 
{
	linkqueue_pnode p;
	for(p=q->front->next; p!=NULL; p= p->next)
	{
		printf("%d  ",p->data);
	}
	puts("");	
}

反思:

链式队列还是在理解队列的特性上用链表的插入、删除来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值