已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗 四 字符串、稀疏矩陣實驗一 實驗目的及要求(1) 熟悉字符串類型的實現(xiàn)方法,并完成串的一些基本操作;(2) 掌握稀疏矩陣的三元組順序表存儲表示,并實現(xiàn)矩陣的轉(zhuǎn)置運算。二.實驗內(nèi)容:(1) 編程實現(xiàn)兩個串S1和S2的比較。(要求自己設(shè)計串的存儲結(jié)構(gòu),并編寫比較函數(shù),不要調(diào)用系統(tǒng)提供的函數(shù))(2) 編程實現(xiàn)稀疏矩陣的三元組順序表示方法及基本操作的實現(xiàn)(建立、輸出、轉(zhuǎn)置等)。(3)編程實現(xiàn)稀疏矩陣的十字鏈表存儲表示及基本操作的實現(xiàn)(建立、輸出等)。三.實驗主要流程、基本操作或核心代碼、算法片段(該部分如不夠填寫,請另加附頁)(1)編程實現(xiàn)兩個串S1和S2的比較。(要求自己設(shè)計串的存儲結(jié)構(gòu),并編寫比較函數(shù),不要調(diào)用系統(tǒng)提供的函數(shù)) 程序代碼:頭文件#define OK 1#define ERROR 0#define OVERFLOW -1#define dayu 1#define xiaoyu -2#define dengyu 0typedef int Status;typedef struct char *ch;int length;HString;Status StrAssign(HString &S);Status StrCompare(HString S,HString T);主函數(shù):#includestdio.h#includestdlib.h#include1.hint main() char c;/用于讀取換行符,便于StrAssign函數(shù)中g(shù)ets讀取串的操作 HString S,T; printf(請確定第一個字符串的長度n); scanf(%d,&S.length); c=getchar(); StrAssign(S);/初始化S的ch部分 printf(請確定第二個字符串的長度n); scanf(%d,&T.length); c=getchar(); StrAssign(T);/初始化T的ch部分 printf(兩字符串的比較結(jié)果為:n); int a;/承載比較結(jié)果 a=StrCompare(S,T);/字符串比較函數(shù) if(a=-2) printf(第一個字符串小于第二個字符串n); else if(a=0) printf(第一個字符串等于第二個字符串n); else if(a=1) printf(第一個字符串大于第二個字符串n); else printf(比較程序出錯n); return ERROR; return OK;功能函數(shù):#includestdio.h#includestdlib.h#include1.h/初設(shè)S,TStatus StrAssign(HString &S) S.ch=(char *)malloc(sizeof(char)*(S.length+1); if(!S.ch) exit(OVERFLOW); printf(請輸入相應長度的字符串n); gets(S.ch); return OK;/比較函數(shù)Status StrCompare(HString S,HString T) int i=0; while(i=S.length&i=T.length) if(S.chiT.chi) return dayu; if(S.length=T.length) return dengyu; if(S.lengthT.length) return dayu; if(S.lengthT.length) return xiaoyu; return OK; 運行結(jié)果:(2)編程實現(xiàn)稀疏矩陣的三元組順序表示方法及基本操作的實現(xiàn)(建立、輸出、轉(zhuǎn)置等)。程序代碼部分:頭文件:#define OK 1#define ERROR 0#define OVERFLOW -2#define maxsize 30typedef int Status;typedef int ElemType;typedef struct int i,j; ElemType e;Triple;typedef struct Triple datamaxsize; int mu,nu,tu;TSMatrix;Status Init(TSMatrix &trip);void visit(TSMatrix trip);void Transpose(TSMatrix trip,TSMatrix &trip1);主函數(shù):#includestdio.h#includestdlib.h#include1.hvoid main() TSMatrix trip; printf(請輸入矩陣規(guī)模(行和列數(shù),空格隔開)n); scanf(%d%d,&trip.mu,&trip.nu); Init(trip); printf(n-n); printf(n原矩陣為n); visit(trip); TSMatrix trip1; Transpose(trip,trip1); printf(n轉(zhuǎn)置矩陣為n); visit(trip1);功能函數(shù):#includestdio.h#includestdlib.h#include1.h/原矩陣存儲Status Init(TSMatrix &trip) printf(請輸入矩陣元素n); ElemType e; trip.tu=0; for(int i=1;itrip.mu+1;i+) for(int j=1;jtrip.nu+1;j+) scanf(%d,&e); if(e!=0) +trip.tu; trip.datatrip.tu.i=i; trip.datatrip.tu.j=j; trip.datatrip.tu.e=e; return OK;/矩陣的輸出void visit(TSMatrix trip) int n=1; for(int i=1;i=trip.mu;i+) for(int j=1;j=trip.nu;j+) if(trip.datan.i=i&trip.datan.j=j&n=trip.tu) printf(%d ,trip.datan.e); n+; else printf(0 ); printf(n); printf(n);/矩陣的轉(zhuǎn)置void Transpose(TSMatrix trip,TSMatrix &trip1) trip1.nu=trip.mu; trip1.mu=trip.nu; trip1.tu=trip.tu; /形成num-cpot表格 int col=0,t=0; int nummaxsize,cpotmaxsize; for(col=1;col=trip.nu;col+) numcol=0; for(t=1;t=trip.tu;t+) +numtrip.datat.j; cpot1=1; for(col=2;col=trip.nu;col+) cpotcol=cpotcol-1+numcol-1;/注意col從2開始 /實施轉(zhuǎn)置 int p; for(t=1;t=trip.tu;t+) col=trip.datat.j;/第一步:取原矩陣存儲每一個非零元列數(shù) p=cpotcol;/第二步:由列數(shù)得到該元素在轉(zhuǎn)置矩陣存儲中的存放位置/第三步:存放數(shù)據(jù)trip1.datap.i=trip.datat.j;trip1.datap.j=trip.datat.i;trip1.datap.e=trip.datat.e;/第四步:更新每一列下一個非零元在轉(zhuǎn)置矩陣存儲中的存放位置cpotcol+; 運行結(jié)果:(3)編程實現(xiàn)稀疏矩陣的十字鏈表存儲表示及基本操作的實現(xiàn)(建立、輸出等)。程序代碼:頭文件:#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct OLNode int i,j; ElemType e; struct OLNode *right,*down;OLNode,*OLink;typedef struct int mu,nu,tu; OLink *rhead,*chead;CrossList;Status Create(CrossList &T);void print(CrossList T);void Add(CrossList &A,CrossList B);主函數(shù):#includestdio.h#includestdlib.h#include1.hint main() CrossList A,B; printf(請輸入矩陣A的行數(shù)、列數(shù)、非零元個數(shù)(空格格開)n); scanf(%d %d %d,&A.mu,&A.nu,&A.tu); printf(請輸入矩陣A的非零元對應的行數(shù)、列數(shù)及非零元本身數(shù)值(空格格開,輸入0 0 0表示非零元輸入結(jié)束)n); Create(A); printf(請輸入矩陣B的行數(shù)、列數(shù)、非零元個數(shù)(空格格開)n); scanf(%d %d %d,&B.mu,&B.nu,&B.tu); printf(請輸入矩陣B的非零元對應的行數(shù)、列數(shù)及非零元本身數(shù)值(空格格開,輸入0 0 0表示非零元輸入結(jié)束)n); Create(B); printf(-n); printf(原矩陣A為:n); print(A); printf(原矩陣B為:n); print(B); printf(-n); printf(矩陣A加B為:n); if(A.mu=B.mu&A.nu=B.nu) Add(A,B); print(A); else printf(兩矩陣規(guī)模不同,不能進行加法n); return 0; 功能函數(shù):#includestdio.h#includestdlib.h#include1.hStatus Create(CrossList &T) if(!(T.rhead=(OLink *)malloc(sizeof(OLink)*(T.mu+1) exit(OVERFLOW); if(!(T.chead=(OLink *)malloc(sizeof(OLink)*(T.nu+1) exit(OVERFLOW); for(int i=1;i=T.mu;i+) T.rheadi=NULL; for(int j=1;ji=i;p-j=j;p-e=e; if(T.rheadi=NULL|T.rheadi-jj) p-right=T.rheadi;T.rheadi=p; else for(q=T.rheadi;(q-right)&q-right-jright); p-right=q-right;q-right=p; if(T.cheadj=NULL|T.cheadj-ii) p-down=T.cheadj;T.cheadj=p; else for(q=T.cheadj;(q-down)&q-down-idown) p-down=q-down;q-down=p; return OK;void print(CrossList T) int t=T.tu; OLNode *p; for(int i=1;i=T.mu;i+) p=T.rheadi; for(int j=1;ji=i&p-j=j) t-;printf(%d ,p-e);p=p-right; elseprintf(0 ); printf(n); printf(n);void Add(CrossList &A,CrossList B)/pre,hl為行、列前驅(qū),hl特殊(對于每一列的第一個非零元,沒有列前驅(qū),即此時的hl就是這些非零元,對于同列的其他非零元,hl是前驅(qū)) OLNode *pa,*pb,*pre; OLink *hl; if(!(hl=(OLink *)malloc(sizeof(OLink)*(A.nu+1) exit(OVERFLOW); for(int i=1;i=A.nu;i+) hli=A.cheadi; for(i=1;ijpb-j) A.tu+;OLNode *p; if(!(p=(OLNode *)malloc(sizeof(OLNode) exit(OVERFLOW);p-i=pb-i;p-j=pb-j;p-e=pb-e; if(pre=NULL) A.rheadp-i=p;elsepre-right=p;p-right=pa;pre=p;/為了使下一次處理該情況時,元素有行前驅(qū),所以讓pre指向p(if和else的共同步驟);if(A.cheadp-j=NULL|A.cheadp-j-ip-i)p-down=A.cheadp-j;A.cheadp-j=p;elsep-down=hlp-j-down;hlp-j-down=p; hlp-j=p;/為了使下一次處理該情況時,元素有列前驅(qū),所以讓hl指向p(if和else的共同步驟);pb=pb-right;/第一種情況和第三種情況處理完后,pb都應改變 else if(pa!=NULL&pa-jj) pre=pa; pa=pa-right;/在第二種和第三種情況下改變 else if(pa-j=pb-j) pa-e+=pb-e;if(pa-e=0) A.tu-; OLNode *p; p=pa;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年圍擋施工現(xiàn)場垃圾處理合同協(xié)議3篇
- 2025年浙科版七年級歷史下冊階段測試試卷
- 2025年湘師大新版九年級地理上冊月考試卷含答案
- 年產(chǎn)1000萬把扳手技改項目可行性研究報告寫作模板-申批備案
- 2025年冀教版九年級歷史下冊階段測試試卷
- 2025年統(tǒng)編版九年級地理下冊階段測試試卷含答案
- 二零二五年度農(nóng)家樂生態(tài)農(nóng)業(yè)科技示范園合作開發(fā)合同范本4篇
- 二零二五版美甲店顧客滿意度調(diào)查與分析合同模板3篇
- 二零二五寧波教育培訓機構(gòu)教師勞動合同4篇
- 2025年度水上交通船舶駕駛員派遣合同范本4篇
- 《向心力》 教學課件
- 結(jié)構(gòu)力學數(shù)值方法:邊界元法(BEM):邊界元法的基本原理與步驟
- 2024年山東省泰安市高考語文一模試卷
- 工程建設(shè)行業(yè)標準內(nèi)置保溫現(xiàn)澆混凝土復合剪力墻技術(shù)規(guī)程
- 北師大版物理九年級全一冊課件
- 2024年第三師圖木舒克市市場監(jiān)督管理局招錄2人《行政職業(yè)能力測驗》高頻考點、難點(含詳細答案)
- RFJ 006-2021 RFP型人防過濾吸收器制造與驗收規(guī)范(暫行)
- 盆腔炎教學查房課件
- 新概念英語課件NCE3-lesson15(共34張)
- GB/T 3683-2023橡膠軟管及軟管組合件油基或水基流體適用的鋼絲編織增強液壓型規(guī)范
- 電視劇《瑯琊榜》特色分析
評論
0/150
提交評論