2022年曉莊-數據結構實驗報告 .pdf
《2022年曉莊-數據結構實驗報告 .pdf》由會員分享,可在線閱讀,更多相關《2022年曉莊-數據結構實驗報告 .pdf(31頁珍藏版)》請在得力文庫 - 分享文檔賺錢的網站上搜索。
1、數據結構 (C 語言版 ) 實驗報告學院信息工程學院班級15 計科 2 班學號15131019 姓名張旭指導教師曹晨名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 1 頁,共 31 頁 - - - - - - - - - 實驗一線性表基本操作和簡單程序1 實驗目的(1)復習 Visual C+ 6.0上機調試程序的基本方法及C 語言編程;(2)掌握線性表的基本操作:初始化、插入、刪除、取數據元素等運算在鏈表存儲結構上的程序設計方法。2 實驗要求(1) 認真閱讀和掌握和本實驗相關的教材
2、內容。(2) 分別以頭插法和尾插法建立兩個數據域定義為整型的升序單鏈表,再將這兩個有序鏈表合并成一個新的無重復元素的有序鏈表,最后可以根據輸入的數據,先找到相應的結點,后刪除之。(3) 上機運行程序。(4) 保存和打印出程序的運行結果,并結合程序進行分析。3 程序代碼#include #include typedef struct node int data; struct node *next; node; node * qbuild(node *first) int i,n,a100; node *s; printf(輸入 n:); scanf(%d,&n); first=(node*)m
3、alloc(sizeof(node); first-next=NULL; for(i=0;idata=ai; s-next=first-next; first-next=s; return first; node * hbuild(node *first) int i,n,a100; struct node *s,*r; printf(輸入 n:); scanf(%d,&n); first=(node*)malloc(sizeof(node); r=first; for(i=0;idata=ai; r-next=s; r=s; r-next=NULL; return first; node *
4、 hebing(node *La,node *Lb) node *pa,*pb,*pc,*Lc; pa=La-next; pb=Lb-next; Lc=pc=La; while(pa & pb) if(pa-data data) pc-next =pa; pc=pa; pa=pa-next ; 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 3 頁,共 31 頁 - - - - - - - - - else if(pa-data pb-data) pc-next =pb; pc=pb
5、; pb=pb-next; else pc-next =pa; pc=pa; pa=pa-next ; pb=pb-next ; pc-next =pa?pa:pb; free(Lb); return Lc; node * shanchu(node *first,int i) node *p,*q; p=first-next; while(p) if(p-next )-data=i) q=p-next ; p-next =q-next; free(q); break; p=p-next; return first; void display(node *first) struct node *
6、p; p=first-next; while(p!=NULL) 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 4 頁,共 31 頁 - - - - - - - - - printf(%d ,p-data); p=p-next; printf(n); int main() int m; struct node *a,*b,*c; a=qbuild(a); printf(打印鏈表a:); display(a); b=hbuild(b); printf(打印鏈表b:); display(
7、b); c=hebing(a,b); printf(打印鏈表c:); display(c); printf(輸入刪除的數m:); scanf(%d,&m); c=shanchu(c,m); printf(打印刪除后的鏈表c:); display(c); return 0; 4 實驗結果輸入 n:5 輸入 a0:9 輸入 a1:5 輸入 a2:4 輸入 a3:3 輸入 a4:1 打印鏈表a:1 3 4 5 9 輸入 n:5 輸入 a0:1 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第
8、 5 頁,共 31 頁 - - - - - - - - - 輸入 a1:3 輸入 a2:4 輸入 a3:6 輸入 a4:8 打印鏈表b:1 3 4 6 8 打印鏈表c:1 3 4 5 6 8 9 輸入刪除的數m:5 打印刪除后的鏈表c:1 3 4 6 8 9 - Process exited after 32.78 seconds with return value 0 請按任意鍵繼續. . . 5 心得體會本次實驗是以后實驗的基礎,是數據結構中最基本的東西。通過本次試驗,我對之前所學習的C 語言知識要點有了進一步實踐,加深了我對C 語言的認識。名師資料總結 - - -精品資料歡迎下載 - -
9、 - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 6 頁,共 31 頁 - - - - - - - - - 實驗二利用棧和隊列判斷字符串是否是回文1 實驗目的(1)深入了解棧和循環隊列的特性、棧和遞歸程序設計的關系。(2)要求能靈活運用兩種結構來解決有關的應用問題。y2 實驗要求(1) 認真閱讀和掌握和本實驗相關的教材內容。(2) 假設正讀和反讀都相同的字符序列為“回文”,例如,abba和 abcba是回文,abcde 和 ababab則不是回文。試寫一個算法判別讀入的一個以為結束符的字符序列是否是“回文”。(3) 上機運行程序。(
10、4) 保存和打印出程序的運行結果,并結合程序進行分析。3 程序代碼#include #include #define m 100 typedef struct /定義棧 char datam; int top; zhan; void cshz(zhan *s) /初始化棧 s-top=0; int pdzk(zhan *s) /判斷棧是否為空 if(s-top=0) return 0; else 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 7 頁,共 31 頁 - - - - -
11、 - - - - return 1; void ruzhan(zhan *s,char x) /入棧 if(s-top=m) printf(???n); else s-data+s-top=x; char chuzhan(zhan *s) /出棧 char y; if(s-top=0) printf(???n); return 0; else y=s-datas-top; s-top=s-top-1; return y; typedef struct /定義隊列 char datam; int front; int rear; dui; void cshdl(dui *q) /初始化隊列 q-
12、front=q-rear=0; 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 8 頁,共 31 頁 - - - - - - - - - void rudui(dui *q,char e) /入隊 if(q-rear+1)%m=q-front) printf(隊列為空 n); else q-dataq-rear=e; q-rear=(q-rear+1); char chudui(dui *q) /出對 char f; if(q-front=q-rear) printf(隊列為空 n)
13、; return 0; else f=q-dataq-front; q-front=(q-front+1); return f; int main() char c; int y=0; zhan *s=(zhan *)malloc(sizeof(zhan); dui *q=(dui *)malloc(sizeof(dui); cshz(s); cshdl(q); printf(輸入一個字符串:n); while(c=getchar()!=) ruzhan(s,c); rudui(q,c); 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - -
14、 - - 名師精心整理 - - - - - - - 第 9 頁,共 31 頁 - - - - - - - - - while(pdzk(s) if(chuzhan(s)=chudui(q) y=1; continue; else y=0; break; if(y=1) printf(此字符串為回文n); else printf(此字符串不是回文n); return 0; 4 實驗結果輸入輸出示例:1. 輸入一個字符串: abbabba 此字符串為回文- Process exited after 8.796 seconds with return value 0 請按任意鍵繼續. . . 2.
15、輸入一個字符串: abbabb 此字符串不是回文- Process exited after 7.968 seconds with return value 0 請按任意鍵繼續. . 5 心得體會名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 10 頁,共 31 頁 - - - - - - - - - 利用棧和隊列進行對回文數的檢測,看似簡單的問題,卻變得更加復雜,但是卻給了我們一個深入了解棧和隊列的機會,對于其中的知識也相對掌握了。這也說明了實踐對課堂上學到的知識有著鞏固和加深的作
16、用,想要學好數據結構,不能怕麻煩。名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 11 頁,共 31 頁 - - - - - - - - - 實驗三三元組表的轉置1 實驗目的(1)掌握稀疏矩陣的存儲方法和基本運算。(2)掌握三元組表轉置的程序設計方法。2 實驗要求(1) 認真閱讀和掌握和本實驗相關的教材內容。(2) 輸入一個三元組表,先輸出其矩陣形態,然后對其進行轉置并輸出轉置后的矩陣。(3) 上機運行程序。(4) 保存和打印出程序的運行結果,并結合程序進行分析。3 程序代碼#inc
17、lude #define MAXSIZE 100 typedef struct /定義三元組 int hang,lie; int zhi; SAN; typedef struct SAN dataMAXSIZE; int mu,nu,tu; SANYUAN; void zhuanzhi(SANYUAN M,SANYUAN *T) /對三元組進行轉置 int col,p,q,t; int numMAXSIZE,cpotMAXSIZE; T-mu=M.nu;T-nu=M.mu;T-tu=M.tu; if(T-tu) 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - -
18、- - - - - - - - 名師精心整理 - - - - - - - 第 12 頁,共 31 頁 - - - - - - - - - for(col=1;col=M.nu;+col) numcol=0; for(t=1;t=M.tu;+t) +numM.datat.lie; cpot1=1; for(col=2;col=M.nu;+col) cpotcol=cpotcol-1+numcol-1; for(p=1;pdataq.hang=M.datap.lie; T-dataq.lie=M.datap.hang; T-dataq.zhi=M.datap.zhi; +cpotcol; void
19、 output(SANYUAN *M) /輸出三元組 int i,j; int t=1; for(i=1;imu;i+) for(j=1;jnu;j+) if(M-datat.hang=i&M-datat.lie=j) printf(%d ,M-datat.zhi); t+; else printf(0 ); printf(n); int main() SANYUAN A,T;int k; printf(輸入矩陣大小n); printf(行: );scanf(%d,&A.mu); printf(列: );scanf(%d,&A.nu); 名師資料總結 - - -精品資料歡迎下載 - - - -
20、 - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 13 頁,共 31 頁 - - - - - - - - - printf(非零元素個數:);scanf(%d,&A.tu); printf(輸入三元組表:n); /順序輸入三元組 for(k=1;k=A.tu;k+) scanf(%d %d %d,&A.datak.hang,&A.datak.lie,&A.datak.zhi); printf(原矩陣 n); output(&A); zhuanzhi(A,&T); printf(轉置后的矩陣:n); output(&T); return 0;
21、 4 實驗結果輸入矩陣大小行: 8 列: 8 非零元素個數:5 輸入三元組表: 1 2 3 2 3 4 3 4 5 5 6 7 7 8 9 原矩陣0 3 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 轉置后的矩陣:0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0
22、0 0 0 0 0 0 0 0 0 0 名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 14 頁,共 31 頁 - - - - - - - - - 0 0 0 0 0 0 9 0 - Process exited after 24.57 seconds with return value 0 請按任意鍵繼續. . . 5 心得體會本次試驗相對簡單一點,容易理解,只要掌握了三元組表的知識,就完全可以解決。名師資料總結 - - -精品資料歡迎下載 - - - - - - - - - -
23、- - - - - - - - 名師精心整理 - - - - - - - 第 15 頁,共 31 頁 - - - - - - - - - 實驗四二叉樹的遍歷1 實驗目的(1) 進一步掌握指針變量的用途和程序設計方法。(2) 掌握二叉樹的結構特征,以及鏈式存儲結構的特點及程序設計方法。(3) 掌握構造二叉樹的基本方法。(4) 掌握二叉樹遍歷算法的設計方法。2 實驗要求(1) 認真閱讀和掌握和本實驗相關的教材內容。(2) 利用二叉鏈表建立一棵二叉樹,分別采用先序、中序和后序遍歷該二叉樹,并輸出遍歷的序列。(3) 上機運行程序。(4) 保存和打印出程序的運行結果,并結合程序進行分析。3 程序代碼#i
24、nclude #include #define MAX 100 typedef struct BiTNode / 定義二叉樹 char data; struct BiTNode *lchild,*rchild; BiTNode,*BiTree; void CreateBiTree(BiTree *T) char data; /按先序次序輸入二叉樹中結點的值(一個字符),#表示空樹 scanf(%c,&data); if(data = #) *T = NULL; else *T = (BiTree)malloc(sizeof(BiTNode); 名師資料總結 - - -精品資料歡迎下載 - -
25、- - - - - - - - - - - - - - - - 名師精心整理 - - - - - - - 第 16 頁,共 31 頁 - - - - - - - - - / 生成根結點 (*T)-data = data; / 構造左子樹 CreateBiTree(&(*T)-lchild); / 構造右子樹 CreateBiTree(&(*T)-rchild); void Visit(BiTree T) / 輸出 if(T-data != #) printf(%c ,T-data); void PreOrder(BiTree T) / 先序遍歷 if(T != NULL) / 訪問根節點 Vi
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創性部分享有著作權。
- 關 鍵 詞:
- 2022年曉莊-數據結構實驗報告 2022 年曉莊 數據結構 實驗 報告
