日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

杨辉三角队列c语言程序,C语言完整队列 与链式队列实现杨辉三角

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杨辉三角队列c语言程序,C语言完整队列 与链式队列实现杨辉三角 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

貴州商專///

編譯環境VS2010

#include "stdafx.h"

#include "stdlib.h"

#define M 100

int max;

typedef struct node

{

int S_J;

struct node *next;

struct node *tou;

struct node *wei;

}list; ?//隊列結構

void chushihua(list *l) ?//初始化

{

l->wei=(list *)malloc(sizeof(list));

if(l->wei==NULL) exit(0);

l->tou=l->wei;

}

int pankong(list *l) ?//判空

{

if(l->tou->next==NULL)

{

printf("隊列為空!請插入元素!\n");

return 1;

}

return 0;

}

void rudui(list *l,int w) ?//入隊

{

list *p=(list *)malloc(sizeof(list));

if(p==NULL) exit(0);

p->S_J=w;

p->next=NULL;

l->wei->next=p;

l->wei=p;

}

void duitou(list *l) ?//取隊頭元素

{

if(pankong(l))

{

return ;

}

printf("出隊元素為:%d\n",l->tou->next->S_J);

l->tou->next=l->tou->next->next;

if(l->tou->next==NULL)

//當隊列為空的時候,從新初始化,否則不能插入元素

l->wei=l->tou;

}

void chadui(list *l) ?//查看隊列

{

list *p=l->tou->next;

//定義臨時變量,防止破壞原隊列

while(p)

{

printf("%d->",p->S_J);

p=p->next;

}

printf("END\n");

}

void yanhui(int w)

{

//數組:

M=w;

int a[M][M],i,j;

for(i=0;i

{

for(j=M;j>=i;j--)

printf(" ?");

for(j=0;j<=i;j++)

{

if(i==j||j==0)

a[i][j]=1;

else

a[i][j]=a[i-1][j]+a[i-1][j-1];

printf("= ",a[i][j]);

if(i==j)

printf("\n");

}*/

///*上面采用的是數組的方法輸出楊輝三角!較為簡單,所以就不注釋了!下面將采用隊列的方法來實現楊輝三角!

// 相比前一種方法更節省內存空間,但同時也復雜很多!(沒辦法!老師要求用隊列啊!)

//鏈表隊列:

int i;int j;int k;int y=1;int n=0,t=0; ?//都是控制流程的變量,沒有必要糾結于此!

list *p=(list *)malloc(sizeof(list));

list *l=(list *)malloc(sizeof(list));

list *f=(list *)malloc(sizeof(list)); ?//p、l為中間鏈表;f是我們所要的鏈表!

chushihua(p);

chushihua(l);

chushihua(f); ?//初始化

list *s=p;

for(i=1;i<=w;i++)

{

for(j=1;j<=i;j++) ?//與數組形式差不多!

{

if(j==1||i==j)

rudui(p,1); ?//每行的頭、尾都為1,入對列

else ?//不是行頭尾時

{

if(y==2) ?//本行之內出對,使隊頭后移一位

{

rudui(l,s->tou->next->S_J);

s->tou->next=s->tou->next->next;

n++;

}

if(y==1) ?//從上一行出對,使得隊頭移到到本行

{

for(k=1;k<=(i-2)*(i-2+1)/2-n;k++)

//(i(i-2)*(i-2+1)/2-n 表示所需出對的次數,

{ ?rudui(l,s->tou->next->S_J);

//使得隊頭移動到本行開頭!

s->tou->next=s->tou->next->next;

t++;

}

y=2;n=n+t;

}

rudui(p,s->tou->next->S_J+s->tou->next->next->S_J);

//以上為核心算法,看上去有點復雜,但如果告訴你算法的思想,你大概就能明白了!

首先:楊輝三角的特點是第N行的中間值等于N-1行兩值的和(有點不標準,但你應該明白意思~~)

所以,我們要解決的是如何使隊頭定位到第N-1

明白了思路,我們就來實現:

首先,用鏈表p(s也一樣)保存當前入隊的值

然后,定位到N-1行,因為隊列采用的是單進單出,所以我們只能依次取隊頭元素讓隊頭指向到N-1

為止,并把取出的隊頭元素入l這個臨時的隊列

最后,由于隊頭已經移到了N-1行,所以在第N行的中間值就可以通過N-1兩數和入隊了!

由于p為當前隊列,而l出對元素組成的隊列,所以只要把l與p連接起來,就可以獲取楊輝三角的鏈表了!

PS:最好對著楊輝三角圖形來看更容易理解,本程序的就是根據這個思路來完成的!由于程序中調用其他

的函數,不便與修改!故程序實現的代碼很是雜亂(當然,也有技術問題~~),但這不要緊,最主要是

明白了思路,然后你可以通過你自己的方法來實現!!//

}

}

y=1;t=0;

}

while(l->tou->next)

{

rudui(f,l->tou->next->S_J);

l->tou->next=l->tou->next->next;

}

while(p->tou->next)

{

rudui(f,p->tou->next->S_J);

p->tou->next=p->tou->next->next;

} ?//以上用f接受l與p的元素,至此楊輝三角隊列完成!

printf("線性輸出為:\n");

chadui(f);

printf("金字塔輸出效果:\n");

for(i=0;i

{

for(j=w;j>=i;j--)

printf(" ?");

for(j=0;j<=i;j++)

{

printf("=

",f->tou->next->S_J);

f->tou->next=f->tou->next->next;

if(i==j)

printf("\n");

}

}

free(l);

free(p);

free(f);

}

int _tmain(int argc, _TCHAR* argv[])

{

list p;

int cd;

int i;

int XZ;

int sr;

int yh;

chushihua(&p);

printf("請輸入隊列長度:");

scanf("%d",&max);

for(i=1;i<=max;i++)

{

printf("請輸入第%d數據:",i);

scanf("%d",&cd);

rudui(&p,cd);

}

while(1)

{

printf("\t請選擇以下操作:\n");

printf("\t1、查看隊列!\n");

printf("\t2、入對!\n");

printf("\t3、出對!\n");

printf("\t4、楊輝三角!\n");

printf("\t5、退出 !\n");

fflush(stdin);

scanf("%d",&XZ);

switch(XZ)

{

case 1:

{

chadui(&p);

}break;

case 2:

{

printf("請輸入進隊元素:");

scanf("%d",&sr);

rudui(&p,sr);

printf("進對成功!\n");

}break;

case 3:

{

duitou(&p);

}break;

case 4:

{

printf("提示:程序會采用金字塔輸出!為了保證輸出效果,行數建議不要大于15!\n");

printf("請輸入行數:");

scanf("%d",&yh);

yanhui(yh);

}break;

case 5:goto la;

default:

printf("請確認輸出!\n");

}

}

la:

return 0;

}

效果圖:

總結

以上是生活随笔為你收集整理的杨辉三角队列c语言程序,C语言完整队列 与链式队列实现杨辉三角的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。