第一篇:實(shí)驗(yàn)八 概率算法
實(shí)驗(yàn)八
概率算法(2學(xué)時)
一、實(shí)驗(yàn)?zāi)康呐c要求
? 熟悉快速排序算法;
? 通過本實(shí)驗(yàn)加深對概率算法的理解。
二、實(shí)驗(yàn)內(nèi)容:
利用隨機(jī)序列選取樞軸值,改進(jìn)快速排序算法。
三、實(shí)驗(yàn)步驟
? 理解算法思想和問題要求; ? 編程實(shí)現(xiàn)題目要求;
? 上機(jī)輸入和調(diào)試自己所編的程序; ? 驗(yàn)證分析實(shí)驗(yàn)結(jié)果; ? 整理出實(shí)驗(yàn)報告。實(shí)驗(yàn)提示
void QuickSort(int r[ ], int low, int high)
{
if(low i=Random(low, high); r[low]←→r[i]; k=Partition(r, low, high); QuickSort(r, low, k-1); QuickSort(r, k+1, high); } } 四、實(shí)驗(yàn)過程 優(yōu)化選取樞軸 三數(shù)取中,即取三個關(guān)鍵字先進(jìn)行排序,將中間數(shù)作為樞軸,一般是取左端、右端和中間三個數(shù),也可以隨機(jī)選取。對于非常大的待排序的序列來說還是不足以保證能夠選擇出一個好的pivo tkey,因此還有個辦法是所謂的九數(shù)取中,先從數(shù)組中分三次取樣,每次取三個數(shù),三個樣品各取出中數(shù),然后從這三個中數(shù)當(dāng)中再取出一個中數(shù)作為樞軸。 public class QuickSortRealize { public static void QuickSort(int[] arr){ QSort(arr,0,arr.length-1);} /* * 對順序表子序列作快速排序 待排序序列的最小下標(biāo)值low和最大下標(biāo)值high */ public static void QSort(int[] arr,int low,int high){ int pivot;if(low QSort(arr, low, pivot-1);//對低子表遞歸排序 QSort(arr, pivot+1, high);//對高子表遞歸排序 } } /* * 選擇一個關(guān)鍵字,想盡辦法將它放到一個位置,使得它左邊的值都比小,* 右邊的值都比它大,我們稱這個關(guān)鍵字叫樞軸。*/ public static int Partition(int[] arr,int low,int high){ if(arr == null || low<0 || high>=arr.length){ new Exception();} int pivotkey; ChoosePivotkey(arr,low,high);//選取樞軸值 pivotkey = arr[low]; while(low high--;} Swap(arr, low, high);while(low public static void Swap(int[] arr,int low,int high){ int temp = arr[low];arr[low] = arr[high];arr[high] = temp;} /* * 三數(shù)取中 選擇樞軸 將樞軸值調(diào)至第一個位置 */ public static void ChoosePivotkey(int[] arr,int low,int high){ int mid = low +(int)(high-low)/2;if(arr[low]>arr[high]){ //保證左端較小 Swap(arr, low, high);} if(arr[mid]>arr[high]){ //保證中間較小 Swap(arr, mid, high);} if(arr[mid]>arr[low]){ //保證中間較小 Swap(arr, mid, low);} } public static void main(String[] args){ int[] arr = {50,10,90,30,70,40,80,60,20};QuickSort(arr);for(int array : arr){ System.out.print(array+“ ”);} System.out.println();} } 五、實(shí)驗(yàn)結(jié)果 六、心得體會 通過本次利用隨機(jī)序列選取樞軸值,改進(jìn)快速排序算法的實(shí)驗(yàn),我熟悉快速排序算法,并加深對概率算法的理解。 實(shí) 驗(yàn) 報 告 課程名稱: SQL Server 數(shù)據(jù)庫基礎(chǔ) 任課教師: 池宗琳 實(shí)驗(yàn)名稱: 存儲過程 年級、專業(yè): 2018級電子信息工程 學(xué) 號: 20181060093 姓 名: 馬 信 日期: 2019 年 月 日 云南大學(xué) 信息學(xué)院 一、實(shí)驗(yàn)?zāi)康?、掌握使用SELECT語句實(shí)現(xiàn)對數(shù)據(jù)庫的簡單查詢 2、掌握使用SELECT語句實(shí)現(xiàn)對數(shù)據(jù)庫的多表鏈接查詢和子查詢 二、實(shí)驗(yàn)內(nèi)容、方法、步驟、結(jié)果與分析 完成以下各題功能,保存或記錄實(shí)現(xiàn)各題功能的Transact-SQL語句。 1.在數(shù)據(jù)庫HrSystem中創(chuàng)建存儲過程avg._wage,用于求所有員工的平均工資,并通過輸出參數(shù)返回該平均工資。要求在創(chuàng)建存儲過程之前要首先判斷該存儲過程是否已經(jīng)存在,如果存在,則將其刪除。 USE Hrsystem GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'avg_wage') DROP PROC avg_wage GO CREATE PROC avg_wage @AVWAGE AS FLOAT AS SELECT @AVWAGE = AVG(Wage) FROM Employees PRINT @AVWAGE GO 2.執(zhí)行第1題創(chuàng)建的存儲過程avg_ wage,打印員工平均工資。 USE Hrsystem GO DECLARE @avg AS FLOAT EXEC avg_wage @avg 3.在數(shù)據(jù)庫HrSystem中創(chuàng)建存儲過程max_ wage,根據(jù)指定的部門名稱(輸人參數(shù))返回該部門的最高工資(輸出參數(shù))。要求在創(chuàng)建存儲過程之前要首先判斷該存儲過程是否已經(jīng)存在,如果存在,則將其刪除。 USE Hrsystem GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'max_wage') DROP PROC avg_wage GO CREATE PROC max_wage @Dename varchar(20),@MAX_wage FLOAT OUTPUT AS SELECT @MAX_wage = MAX(Wage) FROM Employees WHERE Dep_id IN(SELECT Dep_id FROM Departments WHERE Dep_name = @Dename) GROUP BY Dep_id 4.執(zhí)行第3題創(chuàng)建的存儲過程max wage,指定部門為“財務(wù)部”,打印該類部門的最高工資。 USE Hrsystem GO DECLARE @MAX_wage FLOAT EXEC max_wage '財務(wù)部',@MAX_wage OUTPUT PRINT @MAX_wage 5.刪除存儲過程avg_ wage和I max_ wage。 USE Hrsystem GO DROP PROCEDURE max_wage GO DROP PROCEDURE avg_wage (二)觸發(fā)器 創(chuàng)建一個“學(xué)生信息”數(shù)據(jù)庫,包含“學(xué)生基本信息”表、“專業(yè)”表和“系”表,各表包含的字段如下。 “學(xué)生基本信息”表:學(xué)號;姓名;性別;班級;出生日期;專業(yè)編號。 “專業(yè)”表:專業(yè)編號;專業(yè)名稱;系編號。 “系” 表:系編號;系名稱;系簡介。 各字段類型按其實(shí)際含義自行定義,輸人- -些數(shù)據(jù),要求數(shù)據(jù)要有代表性。 以下操作要求全部在SQL Server Management Studio 中完成,保存或記錄實(shí)現(xiàn)各題功能的Transcat-SQL語句(包括測試相應(yīng)觸發(fā)器是否生效的相關(guān)語句及測試結(jié)果)。 1.在“專業(yè)”表上創(chuàng)建一個INSERT觸發(fā)器“TRG1”。當(dāng)發(fā)生插入專業(yè)表操作時,將顯示插入的記錄。 USE 學(xué)生信息 GO CREATE TRIGGER TRG1 ON 專業(yè) FOR INSERT AS DECLARE @depid INT DECLARE @depname varchar(50) DECLARE @number INT SELECT @depid = 專業(yè)編號 FROM inserted SELECT @number = 系編號 FROM inserted SELECT @depname = 專業(yè)名稱 FROM inserted PRINT('系名:'+STR(@depid)+'專業(yè)名:'+STR(@depname)+'系的編號:'+str(@number)) INSERT INTO 專業(yè) (專業(yè)編號,專業(yè)名稱,系編號) VALUES(@depid,@depname,@number) 2.在“專業(yè)”表上創(chuàng)建一個DELETE觸發(fā)器“TRG2”,當(dāng)發(fā)生刪除操作時,將給出警告、列出刪除的記錄并撤銷刪除。 USE 學(xué)生信息 GO CREATE TRIGGER TRG2 ON 專業(yè) FOR DELETE AS PRINT('警告!禁止刪除') ROLLBACK TRANSACTION 3.在“專業(yè)”表上創(chuàng)建一個UPDTAE觸發(fā)器“TRG3”,當(dāng)發(fā)生更新“專業(yè)名稱”字段的操作時,給出警告并撤銷更新 USE 學(xué)生信息 GO CREATE TRIGGER TRG3 ON 專業(yè) FOR UPDATE AS DECLARE @temp_proid INT DECLARE @temp_xiid INT DECLARE @temp_porna varchar(50) SELECT @temp_porna = 專業(yè)名稱 FROM inserted IF @temp_porna IS not NULL BEGIN PRINT('禁止修改專業(yè)名稱') ROLLBACK TRANSACTION END ELSE BEGIN SELECT @temp_porna = 專業(yè)名稱 FROM deleted SELECT @temp_xiid = 系編號 FROM deleted SELECT @temp_proid = 專業(yè)編號 FROM deleted UPDATE 專業(yè) SET 專業(yè)編號 = @temp_proid,系編號 = @temp_xiid WHERE 專業(yè)名稱 = @temp_porna END 4.在“學(xué)生基本信息”表上創(chuàng)建一 一個更新觸發(fā)器“TRG4“,當(dāng)發(fā)生更新“學(xué)號”或“姓名”字段的操作時給出警告,并撤銷更新。 USE 學(xué)生信息 GO CREATE TRIGGER TRG4 ON 學(xué)生基本信息 FOR UPDATE AS DECLARE @temp_stunum char(11) DECLARE @temp_name char(10) DECLARE @temp_gender BIT DECLARE @temp_class varchar(10) DECLARE @temp_date DATETIME DECLARE @temp_proID INT SELECT @temp_name = 姓名 FROM inserted SELECT @temp_stunum = 學(xué)號 FROM inserted IF @temp_name IS NOT NULL OR @temp_stunum IS NOT NULL BEGIN PRINT('禁止修改學(xué)號或者姓名') ROLLBACK TRANSACTION END ELSE BEGIN SELECT @temp_stunum = 學(xué)號 FROM deleted SELECT @temp_name = 姓名 FROM deleted SELECT @temp_gender = 性別 FROM inserted SELECT @temp_class = 班級 FROM inserted SELECT @temp_date = 出生日期 FROM inserted SELECT @temp_proID = 專業(yè)編號 FROM inserted UPDATE 學(xué)生基本信息 SET 性別 = @temp_gender,班級 = @temp_class,出生日期 = @temp_date,專業(yè)編號 = @temp_proID WHERE 學(xué)號 = @temp_stunum END 5.刪除以 上各題創(chuàng)建的所有觸發(fā)器。做好“學(xué)生信息”數(shù)據(jù)庫的備份,以備第10章、第章上機(jī)操作時使用。 USE 學(xué)生信息 GO DROP TRIGGER TRG1 DROP TRIGGER TRG2 DROP TRIGGER TRG3 DROP TRIGGER TRG4 三、實(shí)驗(yàn)小結(jié)【對自己而言,通過實(shí)驗(yàn)學(xué)到的關(guān)鍵技術(shù)方法】 掌握了觸發(fā)器的一些基本方法: 1.創(chuàng)建觸發(fā)器 2.分清了觸發(fā)器的種類,但是還是需要深入了解dml觸發(fā)器中三個種類觸發(fā)器的不同。 3.了解了觸發(fā)器在我們實(shí)際操作中的作用 4. 《算法設(shè)計與分析》實(shí)驗(yàn)報告 實(shí)驗(yàn)3貪心算法 姓名 學(xué)號班級 實(shí)驗(yàn)日期實(shí)驗(yàn)地點(diǎn) 一、實(shí)驗(yàn)?zāi)康?/p> 1、掌握貪心算法的設(shè)計思想。 2、理解最小生成樹的相關(guān)概念。 二、實(shí)驗(yàn)環(huán)境 1、硬件環(huán)境 CPU:酷睿i5 內(nèi)存:4GB 硬盤:1T 2、軟件環(huán)境 操作系統(tǒng):Windows10 編程環(huán)境:jdk 編程語言:Java 三、實(shí)驗(yàn)內(nèi)容:在Prim算法與Kruskal算法中任選一種求解最小生成樹問題。 1、你選擇的是:Prim算法 2、數(shù)據(jù)結(jié)構(gòu) (1)圖的數(shù)據(jù)結(jié)構(gòu)——圖結(jié)構(gòu)是研究數(shù)據(jù)元素之間的多對多的關(guān)系。在這種結(jié)構(gòu)中,任意兩個元素之間可能存在關(guān)系,即結(jié)點(diǎn)之間的關(guān)系可以是任意的,圖中任意元素之間都可能相關(guān)。 圖形結(jié)構(gòu)——多個對多個,如 (2)樹的數(shù)據(jù)結(jié)構(gòu)——樹結(jié)構(gòu)是研究數(shù)據(jù)元素之間的一對多的關(guān)系。在這種結(jié)構(gòu)中,每個元素對下(層)可以有0個或多個元素相聯(lián)系,對上(層)只有唯一的一個元素相關(guān),數(shù)據(jù)元素之間有明顯的層次關(guān)系。樹形結(jié)構(gòu)——一個對多個,如 3、算法偽代碼 Prim(G,E,W)輸入:連通圖G 輸出:G的最小生成樹T 1.S←{1};T=? 2.While V-S ≠? do 3.從V-S中選擇j使得j到S中頂點(diǎn)的邊e的權(quán)最?。籘←T∪{e} 4.S←S∪{j} 3、算法分析 時間復(fù)雜度:O(n)空間復(fù)雜度:O(n^2) 4、關(guān)鍵代碼(含注釋) package Prim; import java.util.*;publicclass Main { staticintMAXCOST=Integer.MAX_VALUE; staticint Prim(intgraph[][], intn){ /* lowcost[i]記錄以i為終點(diǎn)的邊的最小權(quán)值,當(dāng)lowcost[i]=0時表示終點(diǎn)i加入生成樹 */ intlowcost[]=newint[n+1]; /* mst[i]記錄對應(yīng)lowcost[i]的起點(diǎn),當(dāng)mst[i]=0時表示起點(diǎn)i加入生成樹 */ intmst[]=newint[n+1]; intmin, minid, sum = 0; /* 默認(rèn)選擇1號節(jié)點(diǎn)加入生成樹,從2號節(jié)點(diǎn)開始初始化 */ for(inti = 2;i<= n;i++){ /* 標(biāo)記1號節(jié)點(diǎn)加入生成樹 */ mst[1] = 0; /* n個節(jié)點(diǎn)至少需要n-1條邊構(gòu)成最小生成樹 */ for(inti = 2;i<= n;i++){ /* 找滿足條件的最小權(quán)值邊的節(jié)點(diǎn)minid */ for(intj = 2;j<= n;j++){ /* 輸出生成樹邊的信息:起點(diǎn),終點(diǎn),權(quán)值 */ System.out.printf(“%c1, minid + 'A''A' + 1;intj = chy-'A' + 1;graph[i][j] = cost;graph[j][i] = cost;for(intj = 1;j<= n;j++){ } graph[i][j] = MAXCOST;} } System.out.println(”Total:"+cost);} } 5、實(shí)驗(yàn)結(jié)果(1)輸入 (2)輸出 最小生成樹的權(quán)值為: 生成過程: (a) (b) (d) (e) (c) 四、實(shí)驗(yàn)總結(jié)(心得體會、需要注意的問題等) 這次實(shí)驗(yàn),使我受益匪淺。這次實(shí)驗(yàn)我選擇了Prim算法來求出樹的最小生成樹,在編寫代碼的過程中,我對Prim算法有了更深的了解,也使我對算法設(shè)計與分析更有興趣,今后一定要更努力的學(xué)習(xí)這門課。 金陵科技學(xué)院實(shí)驗(yàn)報告 學(xué) 生 實(shí) 驗(yàn) 報 告 冊 課程名稱: 學(xué)生學(xué)號: 所屬院部: (理工類) 算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級: 13網(wǎng)絡(luò)工程 1305106009 學(xué)生姓名: 陳韜 網(wǎng)絡(luò)與通信工程學(xué)院 指導(dǎo)教師: 沈奇 14 ——20 15 學(xué)年 第 1 學(xué)期 金陵科技學(xué)院教務(wù)處制 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)報告書寫要求 實(shí)驗(yàn)報告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點(diǎn)需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。 實(shí)驗(yàn)報告書寫說明 實(shí)驗(yàn)報告中一至四項(xiàng)內(nèi)容為必填項(xiàng),包括實(shí)驗(yàn)?zāi)康暮鸵?;?shí)驗(yàn)儀器和設(shè)備;實(shí)驗(yàn)內(nèi)容與過程;實(shí)驗(yàn)結(jié)果與分析。各院部可根據(jù)學(xué)科特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。 填寫注意事項(xiàng) (1)細(xì)致觀察,及時、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說明,層次清晰。 (3)盡量采用專用術(shù)語來說明事物。 (4)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。 實(shí)驗(yàn)報告批改說明 實(shí)驗(yàn)報告的批改要及時、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn)報告的批改成績采用百分制,具體評分標(biāo)準(zhǔn)由各院部自行制定。 實(shí)驗(yàn)報告裝訂要求 實(shí)驗(yàn)批改完畢后,任課老師將每門課程的每個實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實(shí)驗(yàn)大綱。 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 順序表 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)1 順序表 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 掌握順序表的定位、插入、刪除等操作。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個順序表,并逐個輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結(jié)果。 (2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數(shù)測試結(jié)果。(3)在遞增有序的順序表中插入一個新結(jié)點(diǎn)x,保持順序表的有序性。 解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個元素開始找到第一個大于該新結(jié)點(diǎn)值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結(jié)點(diǎn)x插入到i位置。 (4)刪除順序表中所有等于X的數(shù)據(jù)元素。 2、選做題 (5)已知兩個順序表A和B按元素值遞增有序排列,要求寫一算法實(shí)現(xiàn)將A和B歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。 程序清單: #include 金陵科技學(xué)院實(shí)驗(yàn)報告 } sequenlist;sequenlist L={{1,3,5,5,7,8,10,12,17},8};void print_list(){ int i;for(i=0;i<=L.last;i++)printf(“%4d”,L.data[i]);} void find_all_x(int x){ int found=0,i;for(i=0;i<=L.last;i++)if(L.data[i]==x){ printf(“%3d”,i+1);found=1;} if(found==0)printf(“-1n”);} void insert_x(int x){ int loc,i;for(i=0;i<=L.last;i++)if(x 金陵科技學(xué)院實(shí)驗(yàn)報告 loc=i;for(i=L.last;i>=loc;i--)L.data[i+1]=L.data[i];L.data[loc]=x;L.last++;} void delete_x(int x){ int i,j,found=0;for(i=0;i<=L.last;i++)if(x==L.data[i]){ found=1;for(j=i+1;j<=L.last;j++)L.data[j-1]=L.data[j];i--;L.last--;} if(found==0)printf(“x is not foundn”);else { printf(“x is deletedn”);printf(“the list after deletion is:n”);print_list(); 金陵科技學(xué)院實(shí)驗(yàn)報告 } } void main(){ int x,choice;while(1){ printf(“**********menu**********n”);printf(“ 1--printn”);printf(“ 2--searchn”);printf(“ 3--insertn”);printf(“ 4--deleten”);printf(“ 5--exitn”);printf(“please input your choice:”);scanf(“%d”,&choice); switch(choice){case 1: printf(“the original list is:n”);print_list();break;case 2: printf(“pls input x you want to search:n”); 金陵科技學(xué)院實(shí)驗(yàn)報告 scanf(“%d”,&x);find_all_x(x);break;case 3: printf(“pls input x you want to insert:n”);scanf(“%d”,&x);insert_x(x);printf(“the list after insertion is:n”);print_list();break;case 4: printf(“pls input x you want to delete:n”);scanf(“%d”,&x);delete_x(x);printf(“the list after deletion is:n”);print_list();break;case 5: exit(0);} } } 金陵科技學(xué)院實(shí)驗(yàn)報告 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 單鏈表 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)2 單鏈表 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 1、實(shí)驗(yàn)?zāi)康?/p> 掌握單鏈表的定位、插入、刪除等操作。 2、實(shí)驗(yàn)要求 (1)注意鏈表的空間是動態(tài)分配的,某結(jié)點(diǎn)不用之后要及時進(jìn)行物理刪除,以便釋放其內(nèi)存空間。 (2)鏈表不能實(shí)現(xiàn)直接定位,一定注意指針的保存,防止丟失。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個新結(jié)點(diǎn)x,保持單鏈表的有序性。 解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個結(jié)點(diǎn)開始找到第一個大于該新結(jié)點(diǎn)值的結(jié)點(diǎn)即為插入位置;然后在找到的此結(jié)點(diǎn)之前插入新結(jié)點(diǎn);注意保留插入位置之前結(jié)點(diǎn)的指針才能完成插入操作。 (3)編寫實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測試結(jié)果。 2、選做題 已知指針LA和LB分別指向兩個無頭結(jié)點(diǎn)單鏈表的首元結(jié)點(diǎn)。要求編一算法實(shí)現(xiàn),從表LA中刪除自第i個元素起共len個元素后,將它們插入到表LB中第j個元素之前。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報告 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 堆棧和隊列 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)3 堆棧和隊列 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握應(yīng)用棧解決問題的方法。(2)掌握利用棧進(jìn)行表達(dá)式求和的算法。 (3)掌握隊列的存儲結(jié)構(gòu)及基本操作實(shí)現(xiàn),并能在相應(yīng)的應(yīng)用問題中正確選用它們。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)判斷一個算術(shù)表達(dá)式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。 (3)假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結(jié)束符的字符序列是否是“回文”。 2、選做題 在順序存儲結(jié)構(gòu)上實(shí)現(xiàn)輸出受限的雙端循環(huán)隊列的入列和出列算法。設(shè)每個元素表示一個待處理的作業(yè),元素值表示作業(yè)的預(yù)計時間。入隊列采取簡化的短作業(yè)優(yōu)先原則,若一個新提交的作業(yè)的預(yù)計執(zhí)行時間小于隊頭和隊尾作業(yè)的平均時間,則插入在隊頭,否則插入在隊尾。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報告 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 串 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)4 串 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 掌握串的存儲及應(yīng)用。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)編寫輸出字符串s中值等于字符ch的第一個字符的函數(shù),并用主函數(shù)測試結(jié)果。 (2)編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測試結(jié)果。 解題思路:可以將第一題程序改進(jìn)成一個子函數(shù),在本題中循環(huán)調(diào)用。(3)設(shè)字符串采用單字符的鏈?zhǔn)酱鎯Y(jié)構(gòu),編程刪除串s從位置i開始長度為k的子串。 2、選做題 假設(shè)以鏈結(jié)構(gòu)表示串,編寫算法實(shí)現(xiàn)將串S插入到串T中某個字符之后,若串T中不存在這個字符,則將串S聯(lián)接在串T的末尾。 提示:為提高程序的通用性,插入位置字符應(yīng)設(shè)計為從鍵盤輸入。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報告 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 二叉樹 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)5 二叉樹 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應(yīng)用二叉樹遞歸遍歷思想解決問題的方法。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)建立一棵二叉樹。對此樹進(jìn)行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。 (2)在第一題基礎(chǔ)上,求二叉樹中葉結(jié)點(diǎn)的個數(shù)。(3)在第一題基礎(chǔ)上,求二叉樹中結(jié)點(diǎn)總數(shù)。(4)在第一題基礎(chǔ)上,求二叉樹的深度。 2、選做題 已知一棵完全二叉樹存于順序表sa中,sa.elem[1…sa.last]存儲結(jié)點(diǎn)的值。試編寫算法由此順序存儲結(jié)構(gòu)建立該二叉樹的二叉鏈表。 解題思路:根據(jù)完全二叉樹順序存儲的性質(zhì)來確定二叉樹的父子關(guān)系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構(gòu)造方法進(jìn)行建立。完全二叉樹順序存儲的一個重要性質(zhì)為,第i個結(jié)點(diǎn)的左孩子是編號為2i的結(jié)點(diǎn),第i個結(jié)點(diǎn)的右孩子是編號為2i+1的結(jié)點(diǎn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報告 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 圖 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)6 圖 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)熟練掌握圖的基本概念、構(gòu)造及其存儲結(jié)構(gòu)。 (2)熟練掌握對圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷的算法。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)構(gòu)造一個無向圖(用鄰接矩陣表示存儲結(jié)構(gòu))。 (2)對上面所構(gòu)造的無向圖,進(jìn)行深度優(yōu)先遍歷和廣度優(yōu)先遍歷,輸出遍歷序列。 2、選做題 采用鄰接表存儲結(jié)構(gòu),編寫一個判別無向圖中任意給定的兩個頂點(diǎn)之間是否存在一條長度為k的簡單路徑的算法。簡單路徑是指其頂點(diǎn)序列中不含有重復(fù)頂點(diǎn)的路徑。提示:兩個頂點(diǎn)及k值均作為參數(shù)給出。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 排序 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)7 排序 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數(shù)排序的基本概念。 (2)掌握以上各種排序的算法。區(qū)分以上不同排序的優(yōu)、缺點(diǎn)。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 用隨機(jī)數(shù)產(chǎn)生100000個待排序數(shù)據(jù)元素的關(guān)鍵字值。測試下列各排序函數(shù)的機(jī)器實(shí)際執(zhí)行時間(至少測試兩個):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、堆排序。 2、選做題 假設(shè)含n個記錄的序列中,其所有關(guān)鍵字為值介于v和w之間的整數(shù),且其中很多關(guān)鍵字的值是相同的。則可按如下方法排序:另設(shè)數(shù)組number[v…w],令number[i]統(tǒng)計關(guān)鍵字為整數(shù)i的紀(jì)錄個數(shù),然后按number重排序列以達(dá)到有序。試編寫算法實(shí)現(xiàn)上述排序方法,并討論此種方法的優(yōu)缺點(diǎn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報告 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)項(xiàng)目名稱: 查找 實(shí)驗(yàn)學(xué)時: 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 批改教師: 批改時間: 金陵科技學(xué)院實(shí)驗(yàn)報告 實(shí)驗(yàn)8 查找 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設(shè)計。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)在一個遞增有序的線性表中利用二分查找法查找數(shù)據(jù)元素X。 2、選做題 (2)構(gòu)造一個哈希表,哈希函數(shù)采用除留余數(shù)法,哈希沖突解決方法采用鏈地址法。設(shè)計一個測試程序進(jìn)行測試。 提示:構(gòu)造哈希表只是完成查找的第一步,大家應(yīng)該掌握在哈希表上進(jìn)行查找的過程,可以試著編程序?qū)崿F(xiàn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會) 實(shí)驗(yàn)八 折半查找 一、實(shí)驗(yàn)?zāi)康?、熟悉visual C++上機(jī)環(huán)境,進(jìn)一步掌握C語言的結(jié)構(gòu)特點(diǎn)。 2、進(jìn)一步掌握圖的基本概念及其含義。 3、掌握查找的結(jié)構(gòu)特征,以及各種存儲結(jié)構(gòu)的特點(diǎn)及使用范圍。 4、掌握查找的基本運(yùn)算及其實(shí)現(xiàn)。 二、實(shí)驗(yàn)內(nèi)容(參照課本上的第220頁) 設(shè)計一個算法,實(shí)現(xiàn)折半查找算法。 三、實(shí)驗(yàn)要求 參照課本220頁算法9.2 四、實(shí)驗(yàn)報告要求(參照《數(shù)據(jù)結(jié)構(gòu)題集》第83頁實(shí)驗(yàn)報告模板) 實(shí)驗(yàn)報告必須有以下內(nèi)容:實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)內(nèi)容、實(shí)驗(yàn)要求、源程序、測試結(jié)果(打印界面的形式表示)。第二篇:實(shí)驗(yàn)八
第三篇:實(shí)驗(yàn)3 貪心算法(定稿)
第四篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)
第五篇:上機(jī)實(shí)驗(yàn)八