數據結構習題--棧與隊列(1)


用隊列輸出楊輝三角
基本思路:使用兩個隊列,第一個隊列用於存當前行的系數,將計算后的下一行系數放入第二個隊列,然后再復制到第一個隊列中,最后輸出第一個隊列(循環n-1次)。感謝指出錯誤,手動@杜文澤

#include<stdio.h>
#include<stdlib.h>
#define maxsize 30
typedef int datatype;
typedef struct {
	datatype data[maxsize];
	int front,rear;
}CricQueue; 

void Initial(CricQueue *q){
	int front = 0;
	int rear = 0;
}

int QueueIsEmpty(CricQueue *q){
	return q->front == q->rear;
}

int QueueIsFull(CricQueue *q){
	return q->front == (q->rear+1)%maxsize;
} 

int EnQueue(CricQueue *q,datatype x){
	if(QueueIsFull(q))
		return 0;
	q->data[q->rear++] = x;
	return 1;
}

int DeQueue(CricQueue *q){
	datatype k;
	if(QueueIsEmpty(q))
	    return 0;
	k = q->data[q->front];
	q->front = (q->front+1)%maxsize;
	return k;
}

int Getfront(CricQueue *q){
	datatype m;
	if(QueueIsEmpty(q))
	    return 0;
	m = q->data[q->front];
	return m; 
}

void PascalAngle(int n){
	int i;
	datatype j,k;
	CricQueue *q1 = (CricQueue*)malloc(sizeof(CricQueue));//只用開辟一個空間就可以
	CricQueue *q2 = (CricQueue*)malloc(sizeof(CricQueue));
	Initial(q1),Initial(q2);
	EnQueue(q1,1),EnQueue(q1,1);
	printf("1	1\n");
	for(i = 1;i<n;i++){ 
		EnQueue(q2,1);
		//計算第i+1行的元素,進隊列q2 
	   while(!QueueIsEmpty(q1)){    
		   k = DeQueue(q1);
		    if(!QueueIsEmpty(q1)){
			  j = Getfront(q1);
			  EnQueue(q2,k+j);
	        }else
	        EnQueue(q2,1);	   
	   }
	    //將第i+1行復制到q1中,並輸出該行 
	    while(!QueueIsEmpty(q2)){ 
		    k = DeQueue(q2);
		    EnQueue(q1,k);
			printf("%d",k);
			printf("	");
	   }
	        printf("\n");
   }
}

main(){
	int n;
	printf("請輸入行數:");
	scanf("%d",&n);
	PascalAngle(n);
} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM