写了两种如下
1、
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LinkQueue
{
ElemType data;
struct LinkQueue *next;
}LinkQueue;
//初始化
void InitQueue(LinkQueue **q)
{
if(q==NULL)
{
return;
}
*q=NULL;
}
//入队列
void InsertQueue(LinkQueue **q,ElemType e)
{
if(q==NULL)
{
return;
}
LinkQueue *p=(LinkQueue *)malloc(sizeof(LinkQueue));
if(!p)
{
printf("内存分配失败");
exit(0);
}
if(*q==NULL) //空队列
{
p->data=e;
p->next=NULL;
*q=p;
}
else
{
LinkQueue *s=*q;
while(s->next!=NULL)
{
s=s->next;
}
p->data=e;
p->next=NULL;
s->next=p;
}
}
//出队列
void DeleteQueue(LinkQueue **q,ElemType *e)
{
if(q==NULL)
{
return;
}
if(*q==NULL) //空队列
{
return;
}
LinkQueue *p=*q;
*e=(*q)->data;
*q=(*q)->next;
free(q);
}
//取队首元素
void OutHQueue(LinkQueue *q,ElemType *e)
{
if(q==NULL) //空队列
{
return;
}
*e=q->data;
}
int main()
{
LinkQueue *q;
InitQueue(&q);
ElemType e;
for(int i=0;i<4;i++)
{
InsertQueue(&q,i);
}
OutHQueue(q,&e);
printf("%d",e);
for(int i=0;i<4;i++)
{
DeleteQueue(&q,&e);
printf("%d",e);
}
return 0;
}
2、
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct QNode
{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct LinkQueue
{
QueuePtr front,rear;
}LinkQueue;
//初始化
void InitQueue(LinkQueue *q)
{
q->front=q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!q->front)
{
exit(0);
}
q->front->next=NULL;
}
//入队列
void InsertQueue(LinkQueue *q,int e)
{
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
{
exit(0);
}
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}
//出队操作
void DeleteQueue(LinkQueue *q,ElemType *e)
{
if(q->rear==q->front)
{
return;
}
QueuePtr p=q->front->next;
*e=p->data;
q->front->next=p->next;
if(q->rear==p)
{
q->rear=q->front;
}
free(p);
}
//销毁队列
void DestroyQueue(LinkQueue *q)
{
/*QueuePtr p=q->front;
while(p)
{
q->front=q->front->next;
free(p);
p=q->front;
}*/
while(q->front)
{
q->rear=q->front->next;
free(q->front);
q->front=q->rear;
}
}
int main()
{
LinkQueue q;
InitQueue(&q);
ElemType e;
for(int i=0;i<5;i++)
{
InsertQueue(&q,i);
}
for(int i=0;i<3;i++)
{
DeleteQueue(&q,&e);
printf("%d ",e);
}
DestroyQueue(&q);
DeleteQueue(&q,&e);
return 0;
}