**头歌实践平台答案educoder **
数据结构-队列基本运算的实现及其应用
第1关:顺序队列的实现
/*************************************************************
date: January 2019
循环顺序队列 实现文件
**************************************************************/
void SQ_In(SqQueue *Q, ElemType e)
// 将e入队。即:插入元素e为Q的新的队尾元素。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(!SQ_IsFull(*Q))
{
Q->elem[Q->rear] = e;
Q->rear=(Q->rear+1)%MAXSIZE;
}
return ;
/********** End **********/
}
void SQ_Out(SqQueue *Q, ElemType *e)
// 从队列Q出队一个元素,即:删除Q的队头元素,用e返回其值。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(!SQ_IsEmpty(*Q)){
Q->front = (Q->front+1)%MAXSIZE;
*e = Q->elem[Q->front] ;
}
/********** End **********/
}
void SQ_Head(SqQueue Q, ElemType *head)
// 获取队列的队头元素,用head返回其值。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(!SQ_IsEmpty(Q)){
*head =Q.elem[Q.front] ;
}
/********** End **********/
}
第2关:链队列的实现
/*************************************************************
date: January 2019
队列的链接存储 实现文件
**************************************************************/
int LQ_Length(LinkQueue Q)
// 求队列的长度
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int length = 0 ;
if(!LQ_IsEmpty(Q))
{
QNode *p = Q.front;
while(p->next){
p = p->next;
length++;
}
}
return length;
/********** End **********/
}
void LQ_In(LinkQueue *Q, ElemType e)
// 将e入队。即:插入元素e为Q的新的队尾元素。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
QNode *r = (QNode*)malloc(sizeof(QNode)) ;
r->data = e;
r->next = NULL;
Q->rear->next = r;
Q->rear = r;
/********** End **********/
}
void LQ_Out(LinkQueue *Q, ElemType *e)
//从队列Q出队一个元素,即:删除Q的队头元素,用e返回其值。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
QNode *p;
if(!LQ_IsEmpty(*Q))
{
p = Q->front->next;//
Q->front->next = Q->front->next->next;//删除元素
*e = p->data;//返回数据
free(p);//释放空间
if(Q->front->next==NULL)
Q->rear = Q->front;
}
return ;
/********** End **********/
}
void LQ_Head(LinkQueue Q, ElemType *head)
//获取队列的队头元素,用head返回其值。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
*head = Q.front->next->data;
/********** End **********/
}
第3关:利用循环队列输出杨辉三角形
/*************************************************************
date: January 2019
利用循环顺序队列输出杨辉三角形 实现文件
**************************************************************/
void YangHuiTriangle(int n)//借助循环队列输出n行杨辉三角形
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
SqQueue q;int a,b,i,j;
SQ_Initiate(&q);//创建空队列
SQ_In(&q,1);
for(i=1;i<=n;i++)
{
SQ_In(&q,1);
SQ_Out(&q,&b);
printf(" %d",b);
for(j=1;j<=i-1;j++)
{
a=b;
SQ_Out(&q,&b);
printf(" %d",b);
SQ_In(&q,a+b);
}
SQ_In(&q,1);
printf("\n");
}
/********** End **********/
}