版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)報(bào)告2014 2015 學(xué)年第 2 學(xué)期課程 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)名稱稀疏矩陣的完全鏈表表示及其運(yùn)算學(xué)生姓名 學(xué)號(hào)專業(yè)班級(jí)13軟件工程(2)班 指導(dǎo)教師陳老師 20 15 年 1 月稀疏矩陣的完全鏈表表示及其運(yùn)算【問(wèn)題描述】 稀疏矩陣的每個(gè)結(jié)點(diǎn)包含down,right,row,col和value五個(gè)域。用單獨(dú)一個(gè)結(jié)點(diǎn)表示一個(gè)非零項(xiàng),并將所有結(jié)點(diǎn)連接在一起,形成兩個(gè)循環(huán)鏈表。使得第一個(gè)表即行表,把所有結(jié)點(diǎn)按照行序(同一行內(nèi)按列序)用right域鏈接起來(lái)。使得第二個(gè)表即列表,把所有結(jié)點(diǎn)按照列序(同一列內(nèi)按行序)用down鏈接起來(lái)。這兩個(gè)表共用一個(gè)頭結(jié)點(diǎn)。另外,增
2、加一個(gè)包含矩陣維數(shù)的結(jié)點(diǎn)。稀疏矩陣的這種存儲(chǔ)表示稱為完全鏈表表式。實(shí)現(xiàn)一個(gè)完全鏈表系統(tǒng)進(jìn)行稀疏矩陣運(yùn)算,并分析下列操作函數(shù)的計(jì)算時(shí)間和額外存儲(chǔ)空間的開銷。【設(shè)計(jì)目的】認(rèn)識(shí)和掌握稀疏矩陣的完全鏈表表示;能夠建立并運(yùn)用這種存儲(chǔ)結(jié)構(gòu)【基本要求】建立一個(gè)用戶友好、菜單式系統(tǒng)進(jìn)行下列操作,并使用合當(dāng)?shù)臏y(cè)試數(shù)據(jù)測(cè)試該系統(tǒng)。讀取一個(gè)稀疏矩陣建立其完全鏈表表示輸出一個(gè)稀疏矩陣的內(nèi)容刪除一個(gè)稀疏矩陣兩個(gè)稀疏矩陣相加兩個(gè)稀疏矩陣相減兩個(gè)稀疏矩陣相乘稀疏矩陣的轉(zhuǎn)置【實(shí)現(xiàn)提示鏈表上的操作。2、 數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計(jì)(一)、問(wèn)題分析1、功能要求:根據(jù)用戶輸入的矩陣,實(shí)現(xiàn)稀疏矩陣的求和運(yùn)算,并輸出結(jié)果。2、輸入要求:
3、矩陣的數(shù)據(jù)在程序運(yùn)行的時(shí)候由用戶提供,先由用戶輸入稀疏矩陣的行數(shù)、列數(shù)和非零元個(gè)數(shù)。再根據(jù)非零元個(gè)數(shù),輸入這些非零元,還需要用戶為這些非零元輸入行、列和非零元的值。這樣,一個(gè)稀疏矩陣就輸入完成。3、用單鏈表存儲(chǔ)非零元素的結(jié)點(diǎn)信息,并且將之用矩陣的形式打印出來(lái)(二)、概要設(shè)計(jì)1、結(jié)構(gòu)體的定義typedef int ElemType;struct OLNode int i,j; /非零元所在行、列 ElemType e;/非零元值 OLNode *right,*down;typedef OLNode *OLink;struct CrossList OLink *rhead,*chead;/行、列表
4、頭的頭節(jié)點(diǎn) int mu,nu,tu;/矩陣的行、列和非零元個(gè)數(shù);2、存儲(chǔ)結(jié)構(gòu)選擇采用十字鏈表存儲(chǔ)稀疏矩陣,它是稀疏矩陣鏈?zhǔn)奖硎镜囊环N較好的表示方法。在十字鏈表中,每一個(gè)非零矩陣元素存儲(chǔ)在一個(gè)結(jié)點(diǎn)內(nèi)。每一個(gè)節(jié)點(diǎn)除了存儲(chǔ)非零元素的三元組以外,還設(shè)置了right和down兩個(gè)指針,分別指向同一行的下一個(gè)非零元素結(jié)點(diǎn)和同一列的下一個(gè)非零元的結(jié)點(diǎn)。3、主函數(shù)主函數(shù)包括相加、相減、相乘的各個(gè)子函數(shù)。4、菜單具有選擇功能的用戶友好、菜單式系統(tǒng),可以選擇相應(yīng)的功能來(lái)處理輸入的數(shù)據(jù)。三、詳細(xì)設(shè)計(jì)和編碼1. 設(shè)計(jì)表示(1)函數(shù)調(diào)用關(guān)系圖主函數(shù) 1、相加 2、相減 3、相乘 非零元 OVERFLOW (2)算法思
5、想稀疏矩陣的每個(gè)結(jié)點(diǎn)包含down,right,row,col和value五個(gè)域。用單獨(dú)一個(gè)結(jié)點(diǎn)表示一個(gè)非零項(xiàng),并將所有結(jié)點(diǎn)連接在一起,形成兩個(gè)循環(huán)鏈表。使得第一個(gè)表即行表,把所有結(jié)點(diǎn)按照行序(同一行內(nèi)按列序)用right域鏈接起來(lái)。使得第二個(gè)表即列表,把所有結(jié)點(diǎn)按照列序(同一列內(nèi)按行序)用down鏈接起來(lái)。這兩個(gè)表共用一個(gè)頭結(jié)點(diǎn)。另外,增加一個(gè)包含矩陣維數(shù)的結(jié)點(diǎn)。稀疏矩陣的這種存儲(chǔ)表示稱為完全鏈表表式。(3) 主要編碼int Create(CrossList &M) int i,j,k,m,n,t; ElemType e; OLNode *p,*q; printf("請(qǐng)輸入稀
6、疏距陣的行數(shù) 列數(shù) 非零元的個(gè)數(shù):"); scanf("%d%d%d",&m,&n,&t); M.mu=m; M.nu=n; M.tu=t; M.rhead=(OLink*)malloc(m+1)*sizeof(OLink); if(!M.rhead) exit(OVERFLOW); M.chead=(OLink*)malloc(n+1)*sizeof(OLink); if(!M.chead) exit(OVERFLOW); for(k=0;k!=m;k+)/初始化行頭指針 M.rheadk=NULL; for(k=0;k!=n;k+)/初
7、始化列頭指針 M.cheadk=NULL; printf("請(qǐng)按任意次序輸入%d個(gè)非零元的行 列 元素值:n",M.tu); for(k=0;k<t;k+) scanf("%d%d%d",&i,&j,&e); if(i>m|j>n) printf("你輸入的元素不在矩陣中 請(qǐng)檢查重輸:n"); exit(OVERFLOW); else p=(OLNode*)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); p->i=i; p->j=j; p
8、->e=e; if(M.rheadi=NULL|M.rheadi->j>j)/p插入該行第一節(jié)點(diǎn)處 p->right=M.rheadi; M.rheadi=p; else/尋找行表插入位置 for(q=M.rheadi;q->right&&q->right->j<j;q=q->right); p->right=q->right;/完成行插入 q->right=p; if(M.cheadj=NULL|M.cheadj->i>i)/p插入該列第一節(jié)點(diǎn)處 p->down=M.cheadj; M.
9、cheadj=p; else/尋找列表插入位置 for(q=M.cheadj;q->down&&q->down->i<i;q=q->down); p->down=q->down;/完成列插入 q->down=p; return OK;int Print(CrossList M) int i,j,k; OLink p; int array100100; for(i=0;i!=M.mu;i+) for(j=0;j!=M.nu;j+) arrayij=0;/初始化數(shù)組所需部分 for(k=0;k!=M.nu;k+) p=M.cheadk
10、; while(p) arrayp->ip->j=p->e;/將非零元存入數(shù)組中 p=p->down; for(i=0;i!=M.mu;i+) for(j=0;j!=M.nu;j+) if(j=M.nu-1) cout<<arrayij<<endl; else cout<<arrayij<<" "/以矩陣的顯示方式顯示稀疏矩陣 return OK;int Add(CrossList M,CrossList N,CrossList &Q) int i,k; OLink p,pq,pm,pn; OL
11、ink *col; Q.mu=M.mu;/初始化Q Q.nu=M.nu; Q.tu=0; Q.rhead=(OLink*)malloc(Q.mu+1)*sizeof(OLink); if(!Q.rhead) exit(OVERFLOW); Q.chead=(OLink*)malloc(Q.nu+1)*sizeof(OLink); if(!Q.chead) exit(OVERFLOW); for(k=0;k!=Q.mu;k+)/初始化行 Q.rheadk=NULL; for(k=0;k!=Q.nu;k+)/初始化列 Q.cheadk=NULL; col=(OLink*)malloc(Q.nu+1
12、)*sizeof(OLink);/生成指向列的最后節(jié)點(diǎn)的數(shù)組 if(!col) exit(OVERFLOW); for(k=0;k!=Q.nu;k+)/賦初始值 colk=NULL; for(i=0;i!=M.mu;i+)/按行序相加 pm=M.rheadi; pn=N.rheadi; while(pm&&pn) if(pm->j<pn->j)/矩陣M當(dāng)情前結(jié)點(diǎn)的列小于矩陣N當(dāng)前結(jié)點(diǎn)的列 p=(OLink)malloc(sizeof(OLNode);/生成Q的結(jié)點(diǎn) if(!p) exit(OVERFLOW); Q.tu+; /非零元個(gè)數(shù)1 p->i=i;
13、 /賦值 p->j=pm->j; p->e=pm->e; p->right=NULL; pm=pm->right; /pm右移 else if(pm->j>pn->j) p=(OLink)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); Q.tu+; p->i=i; p->j=pn->j; p->e=pn->e; p->right=NULL; pn=pn->right; else if(pm->e+pn->e)/M,N當(dāng)前結(jié)點(diǎn)的列相同并且兩元素之
14、和非零 p=(OLink)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); Q.tu+; p->i=i; p->j=pn->j; p->e=pm->e+pn->e; p->right=NULL; pm=pm->right;/pm右移 pn=pn->right;/pn右移 else/兩元素相加為零 pm=pm->right; pn=pn->right; continue; if(Q.rheadi=NULL) Q.rheadi=pq=p; else pq->right=p;/完成行插入
15、 pq=pq->right; if(Q.cheadp->j=NULL) Q.cheadp->j=colp->j=p; else colp->j->down=p;/完成列插入 colp->j=colp->j->down; while(pm)/將矩陣M該行的剩余元素插入矩陣Q p=(OLink)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); Q.tu+; p->i=i; p->j=pm->j; p->e=pm->e; p->right=NULL; pm=pm->
16、;right; if(Q.rheadi=NULL) Q.rheadi=pq=p; else pq->right=p; pq=pq->right; if(Q.cheadp->j=NULL) Q.cheadp->j=colp->j=p; else colp->j->down=p; colp->j=colp->j->down; while(pn)/將矩陣N該行的剩余元素插入矩陣Q p=(OLink)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); Q.tu+; p->i=i; p->j=
17、pn->j; p->e=pn->e; p->right=NULL; pn=pn->right; if(Q.rheadi=NULL) Q.rheadi=pq=p; else pq->right=p; pq=pq->right; if(Q.cheadp->j=NULL) Q.cheadp->j=colp->j=p; else colp->j->down=p; colp->j=colp->j->down; for(k=0;k!=Q.nu;k+) if(colk) colk->down=NULL; free
18、(col); return OK;CrossList Negative(CrossList M) OLink p; for(int j=0;j!=M.mu;j+) p=M.rheadj; while(p) p->e=-p->e;/將非零元的值反號(hào) p=p->right; return (M); int Mult(CrossList M,CrossList N,CrossList &Q) int i,j,e; OLink q,p0,q0,q1,q2; if(M.nu!=N.mu) printf("你輸入的兩個(gè)距陣不能進(jìn)行此操作n"); exit(OV
19、ERFLOW); else Q.mu=M.mu; Q.nu=N.nu; Q.tu=0; Q.rhead=(OLink*)malloc(Q.mu+1)*sizeof(OLink); if(!Q.rhead) exit(OVERFLOW); Q.chead=(OLink*)malloc(Q.nu+1)*sizeof(OLink); if(!Q.chead) exit(OVERFLOW); for(i=0;i!=Q.mu;i+)/初始化行 Q.rheadi=NULL; for(i=0;i!=Q.nu;i+)/初始化列 Q.cheadi=NULL; for(i=0;i!=Q.mu;i+) for(j=
20、0;j!=Q.nu;j+) p0=M.rheadi; q0=N.cheadj; e=0; while(p0&&q0) if(q0->i<p0->j) q0=q0->down;/列后移 else if(q0->i>p0->j) p0=p0->right;/行后移 else e=e+p0->e*q0->e;/乘積累加 q0=q0->down; p0=p0->right;/行列后移 if(e)/e不為零則插入Q Q.tu+; q=(OLink)malloc(sizeof(OLNode); if(!q) exit(
21、OVERFLOW); q->i=i; q->j=j; q->e=e; q->right=NULL; q->down=NULL; if(!Q.rheadi) Q.rheadi=q1=q; else q1=q1->right=q; if(!Q.cheadj) Q.cheadj=q; else q2=Q.cheadj; while(q2->down) q2=q2->down; q2->down=q; return OK; 四、上機(jī)調(diào)試過(guò)程1.調(diào)試過(guò)程中遇到的主要問(wèn)題是如何解決的:由于代碼是仿照網(wǎng)上代碼參照而寫出來(lái)的,網(wǎng)上代碼是c+編寫的,所以部分
22、代碼需要改寫成C語(yǔ)言,由于C+我們沒(méi)學(xué)過(guò),所以還要通過(guò)查詢書籍和網(wǎng)絡(luò)了解C+語(yǔ)言如何改寫成C語(yǔ)言,1、cout endl;語(yǔ)句等價(jià)于printf 例:cout<<"你輸入的是"<<endl;等價(jià)于printf("你輸入的是");2、cin;語(yǔ)句等價(jià)于scanf 例:cin>>Select;等價(jià)于scanf("%d",&Select); 其中Select是int型 3、c語(yǔ)言中變量的定義必須在函數(shù)的首部: 像這種的要把int j;提出來(lái) 2.對(duì)設(shè)計(jì)和編碼的回顧討論和分析: 在設(shè)計(jì)方面,主要就是
23、算法思想的設(shè)計(jì),以及具體函數(shù)的設(shè)計(jì)運(yùn)行。在這方面,主要的算法設(shè)計(jì)思想倒不是特別的難想,主要是具體函數(shù)例如加法的函數(shù)的具體設(shè)計(jì)比較繁瑣,耗費(fèi)了較多時(shí)間。而在編碼方面,由于c語(yǔ)言的學(xué)習(xí)還是在大一下學(xué)期,所以對(duì)于相關(guān)知識(shí)已經(jīng)有所遺忘,所以在編碼的過(guò)程遇到了不少問(wèn)題需要查閱書籍,尤其涉及到具體代碼的編寫,更是花費(fèi)了不少時(shí)間來(lái)修正調(diào)試。 五、測(cè)試結(jié)果及其分析 1、改進(jìn)設(shè)想: 對(duì)于運(yùn)算的界面可以更加精美有條理性一些;除此以外,可以給運(yùn)算設(shè)計(jì)一個(gè)選擇界面,用戶可以選擇進(jìn)行計(jì)算和退出;由于部分代碼是參考網(wǎng)上案列c+編碼的,我想把它改成C語(yǔ)言代碼,丹改過(guò)來(lái)后,他總是報(bào)錯(cuò),調(diào)試也找不來(lái)原因,null指沒(méi)有聲明,但
24、在頭文件stdio.h中已有null值得申明,最后自定義個(gè)null值得聲明,還是不行,所以導(dǎo)致我的部分代碼有些不理解,這好似一部分遺憾,希望通過(guò)以后的學(xué)習(xí)和學(xué)習(xí)中明白這些原因。 2、經(jīng)驗(yàn)和體會(huì): 十字鏈表作為存儲(chǔ)結(jié)構(gòu)表示隨機(jī)稀疏矩陣,進(jìn)行兩矩陣的相加運(yùn)算,所以首先要定義一個(gè)十字鏈表作為存儲(chǔ)結(jié)構(gòu)。僅有此還是不夠的,還需要定義指針來(lái)指向鏈表中的元素。在開始的時(shí)候,老是得不到想象中的結(jié)果,通過(guò)幾次的檢查才發(fā)現(xiàn)問(wèn)題出在對(duì)矩陣中的元素指向沒(méi)有弄清楚,所以即使是相位置上的元素也沒(méi)有處理好它們的相加問(wèn)題。這個(gè)實(shí)驗(yàn)從最初的設(shè)計(jì)到完成,出現(xiàn)了很多錯(cuò)誤,通過(guò)最終的修正發(fā)現(xiàn),其實(shí)犯的都是小錯(cuò)誤,都是些指針的問(wèn)題。因
25、為指針是我比較薄弱的環(huán)節(jié)。我發(fā)現(xiàn)了這些問(wèn)題,所以我就要進(jìn)行彌補(bǔ)、查缺補(bǔ)漏。通過(guò)這次課程設(shè)計(jì),敦促我將過(guò)去學(xué)習(xí)過(guò)的知識(shí)進(jìn)行了溫習(xí),知識(shí)只有多鞏固,才能真正的理解與領(lǐng)悟。6、 用戶使用說(shuō)明 按提示進(jìn)行相關(guān)操作。 1、先運(yùn)行出來(lái):出現(xiàn)主界面 2、先選擇你將要運(yùn)算的功能,列如1、相加,然后輸入你第一個(gè)稀疏矩陣的行、列、非零元的個(gè)數(shù),接著輸入非零元素的行、列和值; 輸入第二個(gè)稀疏矩陣的行、列、非零元的個(gè)數(shù),接著輸入非零元素的行、列和值; 3、輸入完成后,點(diǎn)擊回車,它會(huì)顯示出你所輸入的第一個(gè)稀疏矩陣、第二個(gè)稀疏矩陣,以及它們相加后得到的稀疏矩陣。 一、 源程序#include<stdio.h>
26、#include<stdlib.h>#include<iostream.h>#include<process.h>#define OK 1#define ERROR 0#define OVERFLOW -2typedef int ElemType;struct OLNode int i,j; /非零元所在行、列 ElemType e;/非零元值 OLNode *right,*down;typedef OLNode *OLink;struct CrossList OLink *rhead,*chead;/行、列表頭的頭節(jié)點(diǎn) int mu,nu,tu;/矩陣的行
27、、列和非零元個(gè)數(shù);int Create(CrossList &M) int i,j,k,m,n,t; ElemType e; OLNode *p,*q; printf("請(qǐng)輸入稀疏距陣的行數(shù) 列數(shù) 非零元的個(gè)數(shù):"); scanf("%d%d%d",&m,&n,&t); M.mu=m; M.nu=n; M.tu=t; M.rhead=(OLink*)malloc(m+1)*sizeof(OLink); if(!M.rhead) exit(OVERFLOW); M.chead=(OLink*)malloc(n+1)*size
28、of(OLink); if(!M.chead) exit(OVERFLOW); for(k=0;k!=m;k+)/初始化行頭指針 M.rheadk=NULL; for(k=0;k!=n;k+)/初始化列頭指針 M.cheadk=NULL; printf("請(qǐng)按任意次序輸入%d個(gè)非零元的行 列 元素值:n",M.tu); for(k=0;k<t;k+) scanf("%d%d%d",&i,&j,&e); if(i>m|j>n) printf("你輸入的元素不在矩陣中 請(qǐng)檢查重輸:n"); exi
29、t(OVERFLOW); else p=(OLNode*)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); p->i=i; p->j=j; p->e=e; if(M.rheadi=NULL|M.rheadi->j>j)/p插入該行第一節(jié)點(diǎn)處 p->right=M.rheadi; M.rheadi=p; else/尋找行表插入位置 for(q=M.rheadi;q->right&&q->right->j<j;q=q->right); p->right=q->ri
30、ght;/完成行插入 q->right=p; if(M.cheadj=NULL|M.cheadj->i>i)/p插入該列第一節(jié)點(diǎn)處 p->down=M.cheadj; M.cheadj=p; else/尋找列表插入位置 for(q=M.cheadj;q->down&&q->down->i<i;q=q->down); p->down=q->down;/完成列插入 q->down=p; return OK;int Print(CrossList M) int i,j,k; OLink p; int array1
31、00100; for(i=0;i!=M.mu;i+) for(j=0;j!=M.nu;j+) arrayij=0;/初始化數(shù)組所需部分 for(k=0;k!=M.nu;k+) p=M.cheadk; while(p) arrayp->ip->j=p->e;/將非零元存入數(shù)組中 p=p->down; for(i=0;i!=M.mu;i+) for(j=0;j!=M.nu;j+) if(j=M.nu-1) cout<<arrayij<<endl; else cout<<arrayij<<" "/以矩陣的顯示
32、方式顯示稀疏矩陣 return OK;int Add(CrossList M,CrossList N,CrossList &Q) int i,k; OLink p,pq,pm,pn; OLink *col; Q.mu=M.mu;/初始化Q Q.nu=M.nu; Q.tu=0; Q.rhead=(OLink*)malloc(Q.mu+1)*sizeof(OLink); if(!Q.rhead) exit(OVERFLOW); Q.chead=(OLink*)malloc(Q.nu+1)*sizeof(OLink); if(!Q.chead) exit(OVERFLOW); for(k=0
33、;k!=Q.mu;k+)/初始化行 Q.rheadk=NULL; for(k=0;k!=Q.nu;k+)/初始化列 Q.cheadk=NULL; col=(OLink*)malloc(Q.nu+1)*sizeof(OLink);/生成指向列的最后節(jié)點(diǎn)的數(shù)組 if(!col) exit(OVERFLOW); for(k=0;k!=Q.nu;k+)/賦初始值 colk=NULL; for(i=0;i!=M.mu;i+)/按行序相加 pm=M.rheadi; pn=N.rheadi; while(pm&&pn) if(pm->j<pn->j)/矩陣M當(dāng)情前結(jié)點(diǎn)的列小
34、于矩陣N當(dāng)前結(jié)點(diǎn)的列 p=(OLink)malloc(sizeof(OLNode);/生成Q的結(jié)點(diǎn) if(!p) exit(OVERFLOW); Q.tu+; /非零元個(gè)數(shù)1 p->i=i; /賦值 p->j=pm->j; p->e=pm->e; p->right=NULL; pm=pm->right; /pm右移 else if(pm->j>pn->j) p=(OLink)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); Q.tu+; p->i=i; p->j=pn->j;
35、 p->e=pn->e; p->right=NULL; pn=pn->right; else if(pm->e+pn->e)/M,N當(dāng)前結(jié)點(diǎn)的列相同并且兩元素之和非零 p=(OLink)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); Q.tu+; p->i=i; p->j=pn->j; p->e=pm->e+pn->e; p->right=NULL; pm=pm->right;/pm右移 pn=pn->right;/pn右移 else/兩元素相加為零 pm=pm
36、->right; pn=pn->right; continue; if(Q.rheadi=NULL) Q.rheadi=pq=p; else pq->right=p;/完成行插入 pq=pq->right; if(Q.cheadp->j=NULL) Q.cheadp->j=colp->j=p; else colp->j->down=p;/完成列插入 colp->j=colp->j->down; while(pm)/將矩陣M該行的剩余元素插入矩陣Q p=(OLink)malloc(sizeof(OLNode); if(!p)
37、 exit(OVERFLOW); Q.tu+; p->i=i; p->j=pm->j; p->e=pm->e; p->right=NULL; pm=pm->right; if(Q.rheadi=NULL) Q.rheadi=pq=p; else pq->right=p; pq=pq->right; if(Q.cheadp->j=NULL) Q.cheadp->j=colp->j=p; else colp->j->down=p; colp->j=colp->j->down; while(pn)/
38、將矩陣N該行的剩余元素插入矩陣Q p=(OLink)malloc(sizeof(OLNode); if(!p) exit(OVERFLOW); Q.tu+; p->i=i; p->j=pn->j; p->e=pn->e; p->right=NULL; pn=pn->right; if(Q.rheadi=NULL) Q.rheadi=pq=p; else pq->right=p; pq=pq->right; if(Q.cheadp->j=NULL) Q.cheadp->j=colp->j=p; else colp->j
39、->down=p; colp->j=colp->j->down; for(k=0;k!=Q.nu;k+) if(colk) colk->down=NULL; free(col); return OK;CrossList Negative(CrossList M) OLink p; for(int j=0;j!=M.mu;j+) p=M.rheadj; while(p) p->e=-p->e;/將非零元的值反號(hào) p=p->right; return (M); int Mult(CrossList M,CrossList N,CrossList &a
40、mp;Q) int i,j,e; OLink q,p0,q0,q1,q2; if(M.nu!=N.mu) printf("你輸入的兩個(gè)距陣不能進(jìn)行此操作n"); exit(OVERFLOW); else Q.mu=M.mu; Q.nu=N.nu; Q.tu=0; Q.rhead=(OLink*)malloc(Q.mu+1)*sizeof(OLink); if(!Q.rhead) exit(OVERFLOW); Q.chead=(OLink*)malloc(Q.nu+1)*sizeof(OLink); if(!Q.chead) exit(OVERFLOW); for(i=0;i!=Q.mu;i+)/初始化行 Q.rheadi=NULL; for(i=0;i!=Q.nu;i+)/初始化列 Q.cheadi=NULL; for(i=0;i!=Q.mu;i+) for(j=0;j!=Q.nu;j+) p0=M.rheadi; q0=N.cheadj; e=0; while(p0&&q0) if(q0->i<p0-&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度過(guò)橋資金借貸利率規(guī)定合同
- 2025年度新能源汽車股份股權(quán)轉(zhuǎn)讓合同
- 2025年度餐飲店廚師長(zhǎng)年度評(píng)估合同
- 2025版某三期護(hù)坡樁工程施工過(guò)程監(jiān)測(cè)與評(píng)估合同4篇
- 2025年度生態(tài)地板安裝與環(huán)保認(rèn)證服務(wù)合同4篇
- 二零二五年度品牌推廣電子商務(wù)B2B購(gòu)銷數(shù)字資產(chǎn)交易合同4篇
- 2025年度文化創(chuàng)意產(chǎn)業(yè)聘用員工勞動(dòng)合同標(biāo)準(zhǔn)文本4篇
- 二零二五年度健康食品品牌形象設(shè)計(jì)與市場(chǎng)推廣合同3篇
- 二零二五年度生態(tài)農(nóng)場(chǎng)果品出口貿(mào)易合同4篇
- 二零二五年度家政服務(wù)合同中退款條款
- 江蘇中國(guó)中煤能源集團(tuán)有限公司江蘇分公司2025屆高校畢業(yè)生第二次招聘6人筆試歷年參考題庫(kù)附帶答案詳解
- 【語(yǔ)文】第23課《“蛟龍”探?!氛n件 2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)下冊(cè)
- 加強(qiáng)教師隊(duì)伍建設(shè)教師領(lǐng)域?qū)W習(xí)二十屆三中全會(huì)精神專題課
- 2025警察公安派出所年終總結(jié)工作匯報(bào)
- 2024-2025學(xué)年人教版數(shù)學(xué)七年級(jí)上冊(cè)期末復(fù)習(xí)卷(含答案)
- 2024年決戰(zhàn)行測(cè)5000題言語(yǔ)理解與表達(dá)(培優(yōu)b卷)
- 四年級(jí)數(shù)學(xué)上冊(cè)人教版24秋《小學(xué)學(xué)霸單元期末標(biāo)準(zhǔn)卷》考前專項(xiàng)沖刺訓(xùn)練
- 中國(guó)游戲發(fā)展史課件
- (完整版)減數(shù)分裂課件
- 銀行辦公大樓物業(yè)服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- 第01講 直線的方程(九大題型)(練習(xí))
評(píng)論
0/150
提交評(píng)論