// DataStructTest.cpp : Defines the entry point for the console application.
//
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef struct linked_queue
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int data;
struct linked_queue * next;
}LqueueTp;
typedef struct queueptr
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LqueueTp * front;
LqueueTp * rear;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}QueptrTp;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//初始化.申请一个结点且不存储信息,只作为判断是否为空结点的标志
void InitQueue(QueptrTp & lq)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LqueueTp * p=NULL;
while(lq.front!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
p=lq.front;
lq.front=lq.front->next;
free(p);
}
lq.front=lq.rear=NULL;
p=(LqueueTp *)malloc(sizeof(linked_queue));
p->next=NULL;
lq.front=lq.rear=p;
}
//入队
void EnQueue(QueptrTp & lq,int value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LqueueTp * p=(LqueueTp *)malloc(sizeof(linked_queue));
p->data=value;
p->next=NULL;
//修改队尾结点指向新的结点后,再将尾结点指向新增的结点
lq.rear->next=p;
lq.rear=p;
}
//出队
int OutQueue(QueptrTp & lq,int & value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (lq.front==lq.rear)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//得到首节点的值.因为lq.front指向的是标志结点,所以要指向next后面的结点的data
value=lq.front->next->data;
//使首结点指向下一个结点作为了标志结点,然后释放原首结点的空间
LqueueTp * p=lq.front;
lq.front=lq.front->next;
free(p);
return 1;
}
//判断是否为空
int EmptyQueue(QueptrTp & lq)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (lq.front==lq.rear)
return 1;
else
return 0;
}
//得到队头结点的值
int GetHead(QueptrTp & lq,int & value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (lq.front==lq.rear)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return 0;
}
value=lq.front->next->data;
return 1;
}
//显示
void Display(QueptrTp & lq)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
LqueueTp * p=lq.front->next;
while(p!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cout<<"队列中的元素为:"<<p->data<<endl;
p=p->next;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int main(int argc, char* argv[])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
QueptrTp lq;
lq.front=NULL;
lq.rear=NULL;
InitQueue(lq);
//入队
for(int i=1;i<20;i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
EnQueue(lq,i);
}
Display(lq);
//出队
int value=0;
OutQueue(lq,value);
cout<<"出队的结点值为:"<<value<<endl;
Display(lq);
//
EnQueue(lq,500);
cout<<endl;
Display(lq);
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。