数据结构:链队列

代码如下:

#include<stdio.h>
#include<malloc.h>

/**
*链队列的节点。
*/
typedef struct LinkNode{
	int data;
	LinkNode*next;
}* LinkNodePtr;

/**
*链队列
*/
typedef struct LinkQueue{
	LinkNodePtr front;
	LinkNodePtr rear;
}*LinkQueuePtr;

/**
*Construct an empty queue.
*/
LinkQueuePtr initQueue(){
	LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(struct LinkQueue));
	//The Header,The data is not useful.
	LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof(struct LinkNode));
	headerPtr->next=NULL;
	
	resultPtr->front=headerPtr;
	resultPtr->rear=headerPtr;
	return resultPtr;
}//Of initQueue

/**
*Output the queue
*/
void outputLinkQueue(LinkQueuePtr paraQueuePtr){
	LinkNodePtr tempPtr= paraQueuePtr->front->next;
	while(tempPtr!=NULL){
		printf("%d",tempPtr->data);
		tempPtr=tempPtr->next;
	}//Of while
	printf("\n");
}//Of outputLinkQueue

/**
*Enqueue
*/
void enqueue(LinkQueuePtr paraQueuePtr, int paraElement){
	//Step1.Create a new node
	LinkNodePtr tempNodePtr = (LinkNodePtr)malloc(sizeof(struct LinkNode));
	tempNodePtr->data=paraElement;
	tempNodePtr->next=NULL;
	
	//Step2.Link to the existing rear
	paraQueuePtr->rear->next=tempNodePtr;
	
	//Step3.It is the new rear
	paraQueuePtr->rear=tempNodePtr;
}//Of enqueue

/**
*Dequeue
*@return The value of the header
*/
int dequeue(LinkQueuePtr paraQueuePtr){
	int resultValue;
	LinkNodePtr tempNodePtr;
	
	//Step1 Is the queue empty?
	if(paraQueuePtr->front==paraQueuePtr->rear){
		printf("The queue is empty.\n");
		return -1;
	}//Of if
	
	//Step2.Change the queue.
	tempNodePtr = paraQueuePtr->front->next;
	resultValue=tempNodePtr->data;
	paraQueuePtr->front->next=paraQueuePtr->front->next->next;
	
	if(paraQueuePtr->rear == tempNodePtr){
		paraQueuePtr->rear = paraQueuePtr->front;
	}//Of if
	
	//Step3.Free space
	//free(tempNodePtr);
	tempNodePtr=NULL;
	
	//Step4.Return.
	return resultValue;
}//Of enqueue.

/**
*Unit test.
*/
void testLinkQueue(){
	LinkQueuePtr tempQueuePtr;
	tempQueuePtr = initQueue();
	enqueue(tempQueuePtr,10);
	enqueue(tempQueuePtr,30);
	enqueue(tempQueuePtr,50);
	
	outputLinkQueue(tempQueuePtr);
	
	printf("dequeue gets %d\n",dequeue(tempQueuePtr));
	printf("dequeue gets %d\n",dequeue(tempQueuePtr));
	printf("dequeue gets %d\n",dequeue(tempQueuePtr));
	printf("dequeue gets %d\n",dequeue(tempQueuePtr));
	
	enqueue(tempQueuePtr,8);
    outputLinkQueue(tempQueuePtr);
}//Of testLinkQueue

/**
*The entrance
*/
int main(){
	testLinkQueue();
	return 1;
}//Of main

运行结果:

 首先,定义个tempQueuePtr,然后创建个空队列,入列:在函数中定义个新节点,将元素放入其data中,指针域为空,rear的next指向该节点并让rear等于该节点。输出连接队列:定义tempPtr,从front->next开始,NULL为止输出队列。出列:1.判断:如果front==rear,空。2,.定tempNodePtr,l令其等于front的next,resultValue等于其data,令front的next等于front next的next,将tempNodePtr free后返回resultValue。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值