#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}QNode,*PQNode;
typedef struct
{
PQNode front,rear;
}LinkQueue,*PLinkQueue;
//初始化队列
PLinkQueue Init_LinkQueue(void)
{
PLinkQueue Q;
Q=(PLinkQueue)malloc(sizeof(LinkQueue));
if(Q)
{
Q->front=NULL;
Q->rear=NULL;
}
return Q;
}
//判断队空(是否有元素)
int Empty_LinkQueue(PLinkQueue Q)
{
if(Q&&Q->front==NULL&&Q->rear==NULL)
return 1;
else
return 0;
}
//入队
int In_LinkQueue(PLinkQueue Q,int x)
{
PQNode p;
p=(PQNode)malloc(sizeof(QNode));
if(!p)
{
cout<<"内存溢出";
return 0;
}
p->data=x;
p->next=NULL;
if(Empty_LinkQueue(Q))
{
Q->front=Q->rear=p;
}
else
{
Q->rear->next=p;
Q->rear=p;
}
return 1;
}
//出队
int Out_LinkQueue(PLinkQueue Q,int *x)
{
PQNode p;
if(Empty_LinkQueue(Q))
{
cout<<"队空";
return 0;
}
*x=Q->front->data;
p=Q->front;
Q->front=Q->front->next;
free(p);
if(!Q->front)
{
Q->rear=NULL;
}
return 1;
}
//读队头元素
int GetTop_LinkQueue(PLinkQueue Q,int *x)
{
if(Empty_LinkQueue(Q))
{
cout<<"队空";
return 0;
}
*x=Q->front->data;
return 1;
}
//销毁队列
void Destroy_LinkQueue(PLinkQueue *Q)
{
PQNode p,s;
if(*Q)
{
s=(*Q)->front;
while(s)
{
p=s;
s=s->next;
free(p);
}
/*while((*Q)->front)
{
p=(*Q)->front;
(*Q)->front=(*Q)->front->next;
free(p);
}*/
free(*Q);
}
*Q=NULL;
return ;
}
int main()
{
PLinkQueue Q;
Q=Init_LinkQueue();
Destroy_LinkQueue(&Q);
return 0;
}
3.2链式队列
最新推荐文章于 2025-03-24 22:34:05 发布