【数据结构与算法】 队列 |
您所在的位置:网站首页 › 杨辉三角实际应用生活中 › 【数据结构与算法】 队列 |
队列的应用举例1(共2例)
打印杨辉三角
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
由上,是7行的杨辉三角形,杨辉三角形的特点是两腰都是数字1,其他位置是其上一行中与之相岭的两个整数之和。所以,在打印过程中,第i行上的元素要由第i-1行中的元素来生成。我们可以利用循环队列实现打印杨辉三角形的过程。在循环队列中依次存放第i-1行上的元素,然后逐个出列并打印,同时生成第i行元素并入列。 以打印第六行,生成第七行为例,如图
前N行的算法描述如下: void YangHuiTriangle(){ SeqQueue Q; InitQueue(&Q); EnterQueue(&Q,1); //第一行入列 for(n=2;nbase) { exit(OVERFLOW); } Q->front=Q->rear=0; return OK; } int isEmpty(struct SqQueue Q) { if(Q.front==Q.rear) return TRUE; else return FALSE; } int EnterQueue(struct SqQueue *Q,QElemType e) { if((Q->rear+1)%MAXQSIZE==Q->front) return ERROR; Q->base[Q->rear]=e; Q->rear=(Q->rear+1)%MAXQSIZE; return OK; } int DeleteQueue(struct SqQueue *Q,QElemType *e) { if((Q->front==Q->rear)) return ERROR; *e =Q->base[Q->front]; Q->front=(Q->front+1)%MAXQSIZE; return OK; } int main() { char ch1 = '\0',ch2; struct SqQueue Q; int f; InitQueue(&Q); for ( ; ; ) { for( ; ; ) { printf("A"); if(kbhit()){ ch1=bdos(7,0,0); f=EnterQueue(&Q,ch1); if (f==FALSE) { printf("循环队列已满\n"); break; } } if (ch1==';'||ch1==',') { break; } } while(!isEmpty(Q)) { DeleteQueue(&Q, &ch2); putchar(ch2); } if (ch1==';') { break; }else ch1=' '; } } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |