#include <stdio.h>
#include <stdlib.h>
/* 定义:front指针指向头结点,当front==rear时,表示空队列 */
typedef int QElemtype;
typedef struct QNode{
QElemtype data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front,rear;
int size; //记录队列长度
}LinkQueue;
//初始化
void init_Queue(LinkQueue *Q)
{
Q->front=(QueuePtr)malloc(sizeof(QNode));
if(Q->front!=NULL)
{
Q->front->data=NULL;
Q->front->next=NULL;
Q->rear=Q->front;
Q->size=0;
printf("OK\n");
}
}
//入队
void in_Queue(LinkQueue *Q,QElemtype e)
{
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(p!=NULL)
{
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
Q->size++;
}
}
//出队
void out_Queue(LinkQueue *Q,QElemtype *e)
{
if(Q->front==Q->rear)
{
printf("空队列\n");
return;
}
QueuePtr p;
p=Q->front->next;
Q->front->next=p->next;
*e=p->data;
if(Q->rear==p) //如果队列只有一个元素,则需要更改尾指针
Q->rear=Q->front;
free(p);
p=NULL;
Q->size--;
}
//清空队列
void clear_Queue(LinkQueue *Q)
{
if(Q->front!=Q->rear)
{
QueuePtr p,q;
p=Q->front->next;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
Q->rear=Q->front; //不要忘记将尾指针重新指向头结点
Q->rear->next=NULL; //并将头结点的next指针赋值为空
Q->size=0;
}
printf("OK\n");
}
//打印队列
void print_Queue(LinkQueue *Q)
{
if(Q->front==Q->rear)
{
printf("NULL\n");
return;
}
QueuePtr p;
p=Q->front->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
LinkQueue Q;
int i;QElemtype e;
while((i=getchar())!='#') //按#号退出循环
{
switch(i)
{
case '0':init_Queue(&Q);break;
case '1':scanf("%d",&e);in_Queue(&Q,e);break;
case '2':out_Queue(&Q,&e);break;
case '3':clear_Queue(&Q);break;
case '4':print_Queue(&Q);break;
case '5':printf("当前队列长度为%d\n",Q.size); break;
}
}
return 0;
}
数据结构中队列的链式储存结构的基本操作
猜你喜欢
转载自blog.csdn.net/weixin_40908734/article/details/79250758
今日推荐
周排行