




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上軟件技術基礎相關實驗實驗名稱: 棧的應用 一、實驗目的:掌握順序棧和鏈式棧的定義和運算,了解它們的應用。二、實驗要求:1、掌握順序棧的定義、特點及常見算法。2、掌握鏈式棧的定義、特點及常見算法。3、參照給定的棧的程序樣例,驗證給出的棧的常見算法。4、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。三、實驗內容: 1、順序棧的操作和測試。要求:設計一個主函數實現對順序棧進行操作測試。測試方法為:依次把數據元素1,3,5,7,9入棧,并顯示入棧結果;接著依次出棧其中的數據元素并在屏幕上顯示。2、鏈式棧的操作
2、。設計一個主函數實現對鏈式棧進行操作測試。測試方法為:依次把數據元素3,6,9,12,15入棧,并顯示入棧結果;接著依次出棧其中的數據元素并在屏幕上顯示。3、棧的應用。利用順序棧求解表達式(a+b)*(c-d)的值。四、程序要求:1、順序棧的長度自行確定。2、重點理解棧的算法思想,能夠根據實際情況選擇合適的存儲結構。3、寫出完整的程序并能調試通過。五、實驗結果:入棧一個元素:刪除一個元素:取棧頂元素:退出六、實驗中遇到的問題及解決方法: 棧的操作有了前面的基礎,相對而言能夠編寫出來,遇到的問題還是地址操作相關的,通過不斷的練習對于指針對于地址傳遞應該說有了比較好的理解。附:源程序(自行編寫或修
3、改的程序。若為修改程序請注明修改部分的功能,若為書上實例則可不附。)#include "stdio.h"#include"stdlib.h"#include"string.h"#define MAXNUM 20#define ElemType int /*定義順序棧的存儲結構*/typedef struct ElemType stackMAXNUM; int top;SqStack;/*初始化順序棧*/void InitStack(SqStack *p)if(!p) printf("內存分配失敗!");p->
4、top=-1;/*入棧*/void Push(SqStack *p,ElemType x) if(p->top<MAXNUM-1) p->top=p->top+1; p->stackp->top=x; else printf("Overflow! n");/*出棧*/ElemType Pop(SqStack *p) ElemType x; if(p->top>=0) x=p->stackp->top; printf("以前的棧頂數據元素%d已經被刪除! n",p->stackp->t
5、op); p->top=p->top-1; return x; else printf("Underflow! n"); return(0); /*獲取棧頂元素*/ElemType GetTop(SqStack *p)ElemType x;if(p->top>=0)x=p->stackp->top;printf("n棧頂元素為:%dn",x);return x;elseprintf("Underflow! n");return 0;/*遍歷順序棧*/void OutStack(SqStack *p)
6、int i;printf("n");if(p->top<0)printf("這是一個空棧!");printf("n");for(i=p->top;i>=0;i-) printf("第%d個數據元素是:%6dn",i,p->stacki);/*主函數*/void main()SqStack *q;int cord;ElemType a; printf("第一次使用必須初始化! n"); do printf("n-主菜單- "); printf(&q
7、uot;n 1 初始化順序棧 "); printf("n 2 插入一個元素 "); printf("n 3 刪除棧頂元素 "); printf("n 4 取棧頂元素 "); printf("n 5 置空順序棧 "); printf("n 6 結束程序運行 "); printf("n- "); printf("n請輸入指令"); scanf("%d",&cord); printf("n"); swit
8、ch(cord) case 1: q=(SqStack*)malloc(sizeof(SqStack); InitStack(q); OutStack(q); break; case 2: printf("請輸入要插入的數據元素:a="); scanf("%d",&a); Push(q,a); OutStack(q); break; case 3: Pop(q); OutStack(q); break; case 4: GetTop(q); OutStack(q); break; case 5: printf("n順序棧被置空! n&q
9、uot;); OutStack(q); break; case 6: exit(0); while(cord<=6);實驗名稱: 隊列的應用 一、實驗目的:掌握循環隊列和鏈隊列的定義及其基本運算,了解并熟悉隊列的應用。二、實驗要求:1、掌握循環隊列和鏈隊列的特點及常見算法。2、參照給定的循環隊列和鏈隊列的程序樣例,驗證給出的隊列的常見算法。3、能對隊列進行簡單的應用。4、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。三、實驗內容: 1、循環隊列的基本操作。要求:設計一個主函數對循環隊列進行測試。主要功能有:入隊操作、出隊
10、操作、取對頭元素。2、鏈隊列的基本操作。要求:設計一個主函數對鏈隊列進行測試。主要功能有:鏈隊列的初始化、求隊列的長度、入隊列操作、出隊列操作、取對頭元素。3、對隊列進行簡單的應用。四、程序要求:1、能用數字化菜單的方式選擇隊列的各項操作。2、循環隊列中選擇入隊或出隊時能一次入隊或出隊多個數據。3、程序具有一定的防誤操作性,能處理常見的突發事件。4、寫出完整的程序并能調試通過。五、實驗結果:1、創建隊列進行入隊操作2、出對操作,根據先進先出原理,一次出隊3、取出隊頭元素4、判斷隊列是不是空隊列5將隊列置空六、實驗心得體會:通過本次實驗,讓我了解了隊列的一些操作,掌握了隊列編程的技巧。學會了循環
11、隊列的算法。隊列的操作在計算機領域應用較為廣泛,通過隊列的學習也讓我了解到了一些隊列相關的應用,讓我對于計算機操作系統的任務控制也有了一定的了解。先進先出的模式在生活中也十分常見,有了隊列可以解決很多的實際難題,隊列的知識需要我們掌握。附:源程序(自行編寫或修改的程序。若為修改程序請注明修改部分的功能,若為書上實例則可不附。)#include<stdio.h>#include<stdlib.h>typedef int boolean;#define true 1#define false 0typedef struct queueint element10;int re
12、ar;int front;*Squeue,Queue;void Enqueue(Squeue q);/入隊操作void Dequeue(Squeue q);/出隊操作void Getfront(Squeue q);/取對頭元素boolean IsEmpty(Squeue q);/判斷是否為空void EnEmpty(Squeue q);/使隊列置空void main()int input;Squeue q;q=(Squeue)malloc(sizeof(Queue);q->front=0;q->rear=-1;printf("=循環隊列=n");printf(&
13、quot; 1. 入隊操作n");printf(" 2. 出隊操作n");printf(" 3. 取對頭元素n");printf(" 4. 判斷隊列是否為空n");printf(" 5. 置空隊列n");printf("=n");doprintf("請輸入您的操作:");scanf("%d",&input);switch(input)case 1:Enqueue(q); break;case 2:Dequeue(q); break;cas
14、e 3:Getfront(q); break;case 4:if(IsEmpty(q)printf("不存在該隊列n");elseprintf("存在該隊列n"); break;case 5:EnEmpty(q); break;while(input<=5);void Enqueue(Squeue q)int num,i=0,record=0;printf("請輸入您想入隊的元素個數(一次隊列存在不超過10個數據):");scanf("%d",&num);for(i;i<num;i+)print
15、f("請輸入第%d個元素:",i+1);if(+q->rear<=9)if(q->rear=q->front&&record=1)printf("數據溢出n");system("pause");exit(1);else if(q->rear=q->front)record+;scanf("%d",&q->elementq->rear);else q->rear-=10;scanf("%d",&q->ele
16、mentq->rear);if(q->rear=q->front)printf("數據溢出n");system("pause");exit(1);void Dequeue(Squeue q)if(IsEmpty(q)printf("不存在隊列n");elseif(q->front<=9)printf("%dn",q->elementq->front+);elseq->front=0;printf("%dn",q->elementq->f
17、ront+);void Getfront(Squeue q)if(IsEmpty(q)printf("不存在該隊列n");elseprintf("%dn",q->elementq->front);boolean IsEmpty(Squeue q)if(q->rear=-1|q->front-1=q->rear)return true;else return false;void EnEmpty(Squeue q)q->front=0;q->rear=-1;實驗名稱: 二叉樹的生成與遍歷 一、實驗目的:1、熟悉二叉
18、樹節點的定義和二叉樹的定義;2、熟悉二叉樹鏈式結構的生成方式;3、掌握二叉樹遍歷算法的實現。二、實驗要求:1、掌握二叉樹的常見算法:二叉樹的生成、判斷樹是否為空、插入或刪除節點、插入或刪除子樹、二叉樹遍歷等。2、參照給定的二叉樹的程序樣例,驗證給出的有關二叉樹的常見算法,并實現有關的操作。3、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。三、實驗內容: 1編程實現二叉樹的生成及遍歷算法,要求:(1)編寫創建二叉鏈表形式存儲的二叉樹程序并輸出。 (2)編寫遞歸實現二叉樹的先序、中序、后序遍歷算法。 (3)編寫主函數測試以上二叉樹
19、的創建和遍歷函數。 2. 假設二叉樹采用鏈式存儲結構進行存儲,編寫程序實現二叉樹的所有葉子結點的統計并輸出統計個數。四、實驗結果:創建、先序遍歷、中序遍歷、后序遍歷、查找。5、 實驗中遇到的問題及解決方法: 實驗過程中,對于二叉樹的應用落實到代碼上遇到了很多困難,對我而言最困難的就是創建二叉排序樹。如何將自己輸入的數據按二叉排序樹的方式排序對我而言是一個難點,再參閱了資料之后我才寫出。六、實驗心得體會:通過本次實驗讓我對二叉樹的應用有了一定的了解,通過編寫代碼中遇到的各種困難也讓我對于數據結構的理解有所加深,同時也在一定程度上提高了我的編程能力。這次編程參考借鑒了資料,借助別人的代碼才成功修改
20、完成,以后的學習中我要更加扎實,努力將知識點掌握牢固。附:源程序(自行編寫或修改的程序。若為修改程序請注明修改部分的功能,若為書上實例則可不附。)#include<stdio.h>#include<stdlib.h>typedef struct Nodeint data;struct Node *lchild;struct Node *rchild;NODE,*BSTree;BSTree search(BSTree pTree,int key)if(!pTree | pTree->data = key)return pTree;else if(key < p
21、Tree->data)return search(pTree->lchild,key);elsereturn search(pTree->rchild,key);/查找元素bool search_BSTree(BSTree pTree,int key,BSTree parent,BSTree &p)if(!pTree) p = parent;return false;else if(key = pTree->data)p = pTree;return true;else if(key < pTree->data)return search_BSTre
22、e(pTree->lchild,key,pTree,p); elsereturn search_BSTree(pTree->rchild,key,pTree,p); bool insert(BSTree &pTree,int key)BSTree p;if(!search_BSTree(pTree,key,NULL,p)BSTree pNew = (BSTree)malloc(sizeof(NODE);pNew->data = key;pNew->lchild = pNew->rchild = NULL;if(!p) pTree = pNew;else i
23、f(key < p->data)p->lchild = pNew; elsep->rchild = pNew;return true;elsereturn false;/創建二叉樹BSTree create_BSTree(int *arr,int len)BSTree pTree = NULL;int i;for(i=0;i<len;i+)insert(pTree,arri);return pTree;void fdlr(BSTree pTree) /先序遍歷if(pTree)printf("%d ",pTree->data);fdlr(pTree->lchild);fdlr(pTree->rchild);void cdlr(BSTree pTree) /中序遍歷if(pTree)if(pTree->lchild)cdlr(pTree->lchild);printf("%d ",pTree->data);if(pTree-&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文案-長沙福樂藍天公司沿江項目物業發展建議書
- 湖北省“黃鄂鄂”2025年高三下學期4月聯考歷史答案
- 大學生職業規劃大賽《休閑體育專業》生涯發展展示
- 游戲行業中的商務禮儀
- 音樂教育的全方位解析
- 2025設備租賃合同的爭議
- 2025辦公用品采購合同AA
- 2025電梯廣告投放合同模板
- 《心悸的急診處理》課件
- 童心筑夢:幼兒園紅色愛國教育活動設計與實踐
- 外研版(三起)(2024)三年級下冊英語Unit 2 單元測試卷(含答案)
- 國開(內蒙古)2024年《創新創業教育基礎》形考任務1-3終考任務答案
- 家庭教育宣講 全國公開課一等獎
- 貸款資料真實性承諾書
- 中考英語補全對話135個必背句型
- 心理社會評估健康評估本科課件
- 結構化思維與表達課件
- 體育心理學(第三版)課件第八章運動技能的學習
- 深信服SDWAN產品介紹
- JT∕T 1431.3-2022 公路機電設施用電設備能效等級及評定方法 第3部分:公路隧道照明系統
- 行政事業單位公務卡使用管理辦法模板
評論
0/150
提交評論