佇列(楊輝三角)——鏈式佇列
佇列的特點:先進先出
鏈式佇列的楊輝三角的程式碼塊:
#include<stdio.h>
#include<malloc.h>
typedef int DataType;
#define MaxSize 100
//結點型別定義
typedef struct QNode{
DataType data;
struct QNode *next;
}LQNode,*QueuePtr;
//佇列型別定義
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
void PrintArray(int a[],int n,int N);
void YangHuiTriangle(int N);
//鏈式佇列的初始化
int InitQueue(LinkQueue *LQ){
LQ->front=LQ->rear=(LQNode*)malloc(sizeof(LQNode));
if(LQ->front!=NULL){
LQ->front->next=NULL;
}
}
//鏈式佇列的是否為空
int QueueEmpty(LinkQueue LQ){
if(LQ.rear==LQ.front){
return 1;
}else{
return 0;
}
}
//入隊操作
int EnQueue(LinkQueue *LQ,DataType e){
LQNode *s;
s=(LQNode*)malloc(sizeof(LQNode));
if(!s){
return 0;
}
s->data=e;
s->next=NULL;
LQ->rear->next=s;
LQ->rear=s;
return 1;
}
//出隊操作
int DeQueue(LinkQueue *LQ,DataType *e){
LQNode *s;
if(LQ->front==LQ->rear){
return 0;
}else{
s=LQ->front->next;//頭結點的下面第一個結點
*e=s->data;
LQ->front->next=s->next;//將第二個結點的指標賦值
if(LQ->rear==s){
LQ->rear=LQ->front;
}
free(s);
return 1;
}
}
//取隊頭元素
int GetHead(LinkQueue LQ,DataType *e){
LQNode *s;
if(LQ.front==LQ.rear){
return 0;
}else{
s=LQ.front->next;
*e=s->data;
return 1;
}
}
//清空佇列
void ClearQueue(LinkQueue *LQ){
while(LQ->front!=NULL){
LQ->rear=LQ->front->next;
free(LQ);
LQ->front=LQ->rear;
}
}
//鏈式列表實現列印楊輝三角
void YangHuiTriangle(int N){
int i,k,n;
DataType e,t;
//建立定義一個臨時陣列,用於存放每一行的元素
int temp[MaxSize];
LinkQueue Q;
k=0;
//初始化佇列
InitQueue(&Q) ;
//第一行元素入隊
EnQueue(&Q,1);
//產生第n行元素入隊 同時將n-1行元素儲存到臨時陣列中
for(n=2;n<=N;n++){
k=0;
//將第n行的第一個元素入隊
EnQueue(&Q,1);
//利用佇列中第n-1行元素產生第i行的中間n-2個元素入隊
for(i=1;i<=n-2;i++){
DeQueue(&Q,&t);
// 將第n-1行的元素存入臨時陣列
temp[k++]=t;
//取隊頭元素
GetHead(Q,&e);
//利用隊中第n-1行元素產生第i個元素
t=t+e;
//儲存
EnQueue(&Q,t);
}
DeQueue(&Q,&t);
//將第n-1行的最後一個元素存入臨時陣列
temp[k++] =t;
PrintArray(temp,k,N);
//將n行最後一個元素入隊
EnQueue(&Q,1);
}
k=0;
while(!QueueEmpty(Q)){
DeQueue(&Q,&t);
temp[k++]=t;
if(QueueEmpty(Q)){
PrintArray(temp,k,N);
}
}
}
//列印陣列
void PrintArray(int a[],int n,int N){
int i;
static int count=0;
//列印空格
for(i=0;i<N-count;i++){
printf(" ");
}
count++;
for(i=0;i<n;i++){
printf("%6d",a[i]);
}
printf("\n");
}
//主函式
int main(){
int n;
printf("請輸入要列印的行數:");
scanf("%d",&n);
YangHuiTriangle(n);
return 1;
}
實際效果圖:
相關文章
- 使用佇列實現楊輝三角佇列
- 鏈式佇列佇列
- 佇列-鏈式儲存佇列
- 單向鏈式佇列佇列
- 鏈式佇列—用連結串列來實現佇列佇列
- 鏈式儲存的佇列佇列
- 鏈式佇列的實現方式佇列
- 佇列、阻塞佇列佇列
- 帶鏈佇列類佇列
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 佇列-單端佇列佇列
- 佇列的鏈式儲存結構佇列
- 佇列 和 迴圈佇列佇列
- 【佇列】【懶排序】佇列Q佇列排序
- 陣列模擬佇列 以及佇列的複用(環形佇列)陣列佇列
- 佇列 手算到機算 入門 佇列 迴圈佇列佇列
- 圖解--佇列、併發佇列圖解佇列
- 單調佇列雙端佇列佇列
- 佇列佇列
- 連結串列&鏈棧&佇列佇列
- RabbitMQ 訊息佇列之佇列模型MQ佇列模型
- Kafka 延時佇列&重試佇列Kafka佇列
- 分散式佇列神器 Celery分散式佇列
- 分散式訊息佇列分散式佇列
- 【php實現資料結構】鏈式佇列PHP資料結構佇列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- C語言 簡單的佇列(陣列佇列)C語言佇列陣列
- 實現簡單延遲佇列和分散式延遲佇列佇列分散式
- 稀疏陣列、佇列陣列佇列
- 阻塞佇列一——java中的阻塞佇列佇列Java
- 07-主佇列和全域性佇列佇列
- synchronized 中的同步佇列與等待佇列synchronized佇列
- 動畫佇列動畫佇列
- java佇列Java佇列
- 佇列,棧佇列
- 映象佇列佇列
- 棧、佇列佇列
- 貓狗佇列佇列