无标题文章

2016-11-27  本文已影响0人  TDKDPIKA

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

#define MaxSize 50

//构造环形队列的数据类型

typedef char ElemType;

struct queue
{
 ElemType data[MaxSize];//顺序存储数据元素
 int front,rear;//分别是队首队尾的指示器

};

typedef struct queue Queue;
/*
函数功能:InitQueue,初始化空队列
函数形参:Queue *&Q
函数返回值:无
*/
void InitQueue(Queue *&Q)
{
 //初始化空队列,申请起始地址,并初始化两个指示器的位置
 Q=(Queue *)malloc(sizeof(Queue));
 Q->front=Q->rear=0;
}
/*
函数功能:QueueEmpty,1代表空队列,0代表非空队列
函数形参:Queue *Q
函数返回值:int
*/
int QueueEmpty(Queue *Q)
{
 return (Q->front==Q->rear);
}
/*
函数功能:enQueue 入队
函数形参:Queue*Q,ElemType e入队元素值
函数返回值:若队满则返回0表示入队失败,否则返回1,入队成功
*/
int enQueue(Queue *Q,ElemType e)
{
 //判断队是否满
 if((Q->rear+1)%MaxSize==Q->front) return 0;//入队失败
 //入队,队尾指示器加1,元素入队
 Q->rear=(Q->rear+1)%MaxSize;
 Q->data[Q->rear]=e;
 return 1;//入队成功
}
/*
函数功能:deQueue,出队
函数形参:Queue *Q,ElemType &e临时存放被出队元素
函数返回值:若队空则返回0表示出队失败,否则返回1,出队成功
*/
int deQueue(Queue *Q,ElemType &e)
{
 //判断队是否空
 if(Q->front==Q->rear) return 0;
 //出队
 //e=Q->data[(Q->front+1)%MaxSize];
 Q->front=(Q->front+1)%MaxSize;
 e=Q->data[Q->front];
 return 1;//出队成功
}
/*
函数功能:DestroyQueue 释放内存
函数形参:Queue *Q
函数返回值:无
*/
void DestroyQueue(Queue *&Q)
{
 free(0);
 Q=NULL;
}
/*
函数功能:DispQueue从队首到队尾打印所有元素
函数形参:Queue *Q
函数返回值:无
*/
void DispQueue(Queue *&Q)
{
 int i;
 for(i=Q->front;i<Q->rear;i++)
  printf("%c ",Q->data[i+1]);
 printf("\n");
}

void QueueLength(Queue *Q,int &a)
{
 a=(Q->rear-Q->front+MaxSize)%MaxSize;
}


int main()
{
 Queue *Q;ElemType e,a;int b;
 printf("(1)环形队列初始化。。。\n");InitQueue(Q);
 printf("(2)环形队列当前状态是:");
 if(QueueEmpty(Q)==1) printf("空队\n");
 else                 printf("非空队\n");
 printf("(3)元素入队\n");
 if(enQueue(Q,'A')==1) printf("入队成功\n");
 else                 printf("入队失败\n");
 if(enQueue(Q,'B')==1) printf("入队成功\n");
 else                 printf("入队失败\n");
 if(enQueue(Q,'C')==1) printf("入队成功\n");
 else                 printf("入队失败\n");
 printf("(4)环形队列当前状态是:");
 if(QueueEmpty(Q)==1) printf("空队\n");
 else                 printf("非空队\n");
 printf("打印元素\n");DispQueue(Q);
 printf("统计长度\n");QueueLength(Q,b);
 printf("%d",b);
 printf("(5)元素出队");
 if(deQueue(Q,e)==1) printf("出队成功,出队元素为:%c\n",e);
 else                printf("出队失败");
 printf("(6)销毁队列\n");DestroyQueue(Q);
 system ("PAUSE");
 return 0;
}

上一篇下一篇

猜你喜欢

热点阅读