链队列

#include "linked_list.h"
/*
typedef struct LNode
{
	ElemType data;
	struct LNode * next;
}LNode;
*/
typedef LNode QNode;
typedef struct
{
	QNode *front;
	QNode *rear; 
}LinkQueue;
int InitQueue_link(LinkQueue *queue)
{
	QNode *hnode=NULL;
	hnode=(QNode *)malloc(sizeof(QNode));
	if(NULL==hnode)
		return -1;
	hnode->next=NULL;
	(*queue).front=hnode;
	(*queue).rear=hnode;
	return 0;
}
int QueueEmpty_link(LinkQueue queue)
{
	if(queue.front==queue.rear)
		return 1;
	return 0;
}
int QueueLength_link(LinkQueue queue)
{
	int count=0;
	QNode *p=queue.front;
	while(p!=queue.rear)
	{
		p=p->next;
		count++;
	}
	return count;
}
int Gethead_link(LinkQueue queue,ElemType *e)
{
	if(QueueEmpty_link(queue))
		return -1;
	*e=(queue.front)->next->data;
	return 0;
}
int EnQueue_link(LinkQueue queue,ElemType e)
{
	QNode *p;
	p=(QNode *)malloc(sizeof(QNode));
	if(NULL==p)
		return -1;
	p->data=e;
	p->next=NULL;
	(queue.rear)->next=p;
	queue.rear=p;
	return 0;
}
int DeQueue_link(LinkQueue queue,ElemType *e)
{
	QNode *p=NULL;
	if(QueueEmpty_link(queue))
		return -1;
	p=(queue.front)->next;
	*e=p->data;
	(queue.front)->next=p->next;
	free(p);
	return 0;
}
int main()
{
	ElemType e;
	LinkQueue q;
	printf("(1)初始化链队q\n");
	InitQueue_link(&q);
	printf("(2)依次进链队元素a,b,c\n");
	EnQueue_link(q,'a');
	EnQueue_link(q,'b');
	EnQueue_link(q,'c');
	printf("(3)链队为%s\n",(QueueEmpty_link(q)?"空":"非空"));
	if (DeQueue_link(q,&e)==-1) 
		printf("队空,不能出队\n");
	else
		printf("(4)出队一个元素%c\n",e);
	printf("(5)链队q的元素个数:%d\n",QueueLength_link(q));
	printf("(6)依次进链队元素d,e,f\n");
	EnQueue_link(q,'d');
	EnQueue_link(q,'e');
	EnQueue_link(q,'f');
	printf("(7)链队q的元素个数:%d\n",QueueLength_link(q));
	printf("(8)出链队序列:");
	while (!QueueEmpty_link(q))
	{	
		DeQueue_link(q,&e);
		printf("%c ",e);
	}
	printf("\n");
	printf("(9)释放链队\n");
	return 0;
}

这是没有实现的,正在改

*****************************************************************

经过几天奋斗,终于成功改出来,现贴如下

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct LNode
{
	ElemType data;                        
	struct LNode * next;
}LNode;
typedef LNode QNode;
typedef struct
{
	QNode *front;
	QNode *rear;
}LinkQueue;
int CreatQueue(LinkQueue *queue)
{
	QNode *p;
    p=(QNode *)malloc(sizeof(QNode));
	if(NULL==p)
		return -1;
	p->next=NULL;
	queue->front=p;
	queue->rear=p;
	return 0;
}
int QueueEmpty(LinkQueue *queue)
{
	if(queue->front->next==NULL)
		return 1;
	return 0;
}
int QueueLength(LinkQueue queue)
{
	int count=1;
	QNode *p=queue.front;
	if(QueueEmpty(&queue))
		return 0;
	while(p->next->data!=queue.rear->data)
	{
		p=p->next;
		count++;
	}
	return count;
}
int GetHead(LinkQueue queue,ElemType *e)
{
	if(QueueEmpty(&queue))
		return -1;
	*e=(queue.front)->next->data;
	return 0;
}
int EnQueue(LinkQueue *queue,ElemType e)
{
	QNode *p;
    p=(QNode *)malloc(sizeof(QNode));
	if(NULL==p)
		return -1;
	p->data=e;
	p->next=NULL;
	queue->rear->next=p;
	queue->rear=p;
	return 0;
}
int DeQueue(LinkQueue queue,ElemType *e)
{
	QNode *p=NULL;
	if(QueueEmpty(&queue))
		return -1;
	p=(queue.front)->next;
	*e=p->data;
	(queue.front)->next=p->next;
	p->next=NULL;
	free(p);
	return 0;
}
int main()
{
	int i;
	ElemType e='a';
	LinkQueue d ;
	CreatQueue(&d);
	EnQueue(&d,'g');
	if(QueueEmpty(&d))
		printf("此队列为空队列\n");
	printf("%c\n",d.front->next->data);
	printf("%c\n",d.rear->data);
	printf("%d\n",QueueLength(d));
	EnQueue(&d,'b');
	printf("%c\n",d.front->next->data);
	printf("%c\n",d.rear->data);
	printf("%d\n",QueueLength(d));
	EnQueue(&d,'c');
	printf("%c\n",d.front->next->data);
	printf("%c\n",d.rear->data);
	printf("%d\n",QueueLength(d));
	EnQueue(&d,'d');
	if(QueueEmpty(&d))
		printf("此队列为空队列\n");
	if(0==GetHead(d,&e))
		printf("队首的数据是:%c \n",e);
	for(i=0;i<4;i++)
	{
		if(0==GetHead(d,&e))
			printf("队首的数据是:%c \n",e);
		printf("%c\n",d.front->next->data);
		printf("%c\n",d.rear->data);
		printf("出队列的第%d 个数:",i+1);
		DeQueue(d,&e);
		printf("%c\n",e);
	}
	if(QueueEmpty(&d))
		printf("此队列为空队列\n");
		DeQueue(d,&e);
		printf("%c\n",e);
		printf("%d\n",QueueLength(d));
	if(0==GetHead(d,&e))
		printf("队首的数据是:%c \n",e);
	return 0;
}

测试结果


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值