Educoder头歌数据结构-队列基本运算的实现及其应用

**头歌实践平台答案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 **********/
}

你可能感兴趣的:(头歌educoder答案,r语言,数据结构,开发语言)