隊列也是一種運算受限的線性表。是一種先進先出的線性表,只容許在表的一端插入,在另外一端進行刪除。
容許刪除的一段稱爲隊首,容許插入的一端成文隊尾。ui
隊列根據存儲形式可分爲:順序隊列,鏈式隊列。區別爲物理存儲是否連續,相應的節點之間的聯繫爲是否須要做用域。指針
應用隊列打印楊輝三角:
循環隊列中一次存放i-1行上的元素,而後逐個出隊並打印,同時生成第i行元素併入隊列。code
#include "stdio.h" #define TRUE 1 #define FALSE 0 #define MAXSIZE 50 /*隊列的最大長度*/ typedef struct { int element[MAXSIZE]; /* 隊列的元素空間*/ int front; /*頭指針指示器*/ int rear; /*尾指針指示器*/ }SeqQueue; /*初始化操做*/ void InitQueue(SeqQueue *Q) { /* 將*Q初始化爲一個空的循環隊列 */ Q->front=Q->rear=0; } int IsEmpty(SeqQueue *Q) { if(Q->front==Q->rear) //隊列爲空 return(TRUE); else return FALSE; } /*入隊操做*/ int EnterQueue(SeqQueue *Q, int x) { /*將元素x入隊*/ if((Q->rear+1)%MAXSIZE==Q->front) /*隊列已經滿了*/ return(FALSE); Q->element[Q->rear]=x; Q->rear=(Q->rear+1)%MAXSIZE; /* 從新設置隊尾指針 */ return(TRUE); /*操做成功*/ } /*出隊操做*/ int DeleteQueue(SeqQueue *Q, int *x) { /*刪除隊列的隊頭元素,用x返回其值*/ if(Q->front==Q->rear) /*隊列爲空*/ return(FALSE); *x=Q->element[Q->front]; Q->front=(Q->front+1)%MAXSIZE; /*從新設置隊頭指針*/ return(TRUE); /*操做成功*/ } int GetHead(SeqQueue *Q, int *x) { /*提取隊列的隊頭元素,用x返回其值*/ if(Q->front==Q->rear) /*隊列爲空*/ return(FALSE); *x=Q->element[Q->front]; return(TRUE); /*操做成功*/ } void YangHuiTriangle( ) { int n; int i; int temp; int x; int N; SeqQueue Q; InitQueue(&Q); EnterQueue(&Q,1); /* 第一行元素入隊*/ printf("please input N:"); scanf("%d",&N); for(n=2;n<=N;n++) /* 產生第n行元素併入隊,同時打印第n-1行的元素*/ { EnterQueue(&Q,1); /* 第n行的第一個元素入隊*/ for(i=1;i<=n-2;i++) /* 利用隊中第n-1行元素產生第n行的中間n-2個元素併入隊*/ { DeleteQueue(&Q,&temp); printf("%6d",temp); /* 打印第n-1行的元素*/ GetHead(&Q,&x); temp=temp+x; /*利用隊中第n-1行元素產生第n行元素*/ EnterQueue(&Q,temp); } DeleteQueue (&Q,&x); printf("%6d",x); /* 打印第n-1行的最後一個元素*/ EnterQueue(&Q,1); /* 第n行的最後一個元素入隊*/ printf("\n"); } while(!IsEmpty(&Q)) //打印第n行元素 { DeleteQueue(&Q,&x); printf("%6d",x); } } void main() { YangHuiTriangle( ); }