1. 程式人生 > >資料結構課程設計實驗報告

資料結構課程設計實驗報告

《演算法與資料結構》課程設計報告                                       

資料結構課程設計是在學完資料結構課程之後的實踐教學環節。本實踐教學是培養學生資料抽象能力,進行復雜程式設計的訓練過程。要求學生能對所涉及問題選擇合適的資料結構、儲存結構及演算法,並編寫出結構清楚且正確易讀的程式,提高程式設計基本技能和技巧。

一.設計目的

1.提高資料抽象能力。根據實際問題,能利用資料結構理論課中所學到的知識選擇合適的邏輯結構以及儲存結構,並設計出有效解決問題的演算法。

2.提高程式設計和除錯能力。學生通過上機練習,驗證自己設計的演算法的正確性。學會有效利用基本除錯方法,迅速找出程式程式碼中的錯誤並且修改。

3.初步瞭解開發過程中問題分析、整體設計、程式編碼、測試等基本方法和技能。

二.設計方案

設計方案如下:

1.  單鏈表的基本操作及應用

首先用InitList_L()函式初始化線性表,構造一個空表,再使用CreateList_L( )函式建立一個想要的線性表。剩餘的基本操作ListInsert_L( )插入,ListDelete_L( )刪除,LocateElem_L( )查詢,即可相應完成。

2.  棧的基本操作及應用

同線性表,首先用InitStack(STACK&S)初始化,構造一個空棧,再使用Push(STACK&S, ElemType e)向棧內壓入元素,出棧則使用Pop(STACK &S, ElemType &e),取出棧內元素,用函式GetTop(STACK S, ElemType &e)獲取棧頂元素。

3.  陣列的基本操作及應用

利用函式CreateSMatrix(TSMatrix&M)建立一個稀疏矩陣,則需要一個數組Triple data[MAXSIZE+1]記錄非零元素的行序、列序和數值。再將三元陣列中元素的行序和列序和矩陣的行序和列序作比較,不相等的矩陣元素則為零,相等則為稀疏因子的值。再利用函式PrintSMatrix(TSMatrix M)輸出稀疏矩陣。

4.  二叉樹的基本操作及應用

首先使用函式CreateBiTree(BiTree&T)遞迴建立二叉樹的左子樹和右子樹,隨後利用函式PreOrder(T)、InOrder(T)和PostOrder(T)遞迴先序、中序和後序遍歷二叉樹的值,再函式Visit(BiTree T)輸出二叉樹節點的值。計算二叉樹的深度,比較二叉樹節點左子樹和右子樹的孩子都為空的時候的記錄的值大,即為樹的深度。計算二叉樹葉子節點的個數,當節點的左右孩子都為空的時候,節點為葉子,則可以使用計數,當節點左右孩子為空,計數加1,知道計算所有的樹,總和為葉子的個數。求赫夫曼編碼,各字元的編碼長度不等,所以按實際長度動態分配空間,從葉子到根逆向處理求得各個葉子節點所表示的字元的赫夫曼編碼。

5.  圖的基本操作及應用

利用鄰接矩陣表示法構造圖,網則要記錄權值,構造鄰接矩陣arcs儲存圖。訪問初始點Vi,並標誌其已被訪問。此時定義一指向邊結點的指標p,並建立一個while()迴圈,以指標所指物件不為空為控制條件,當Vi的鄰接點未被訪問時,遞迴呼叫深度優先遍歷函式訪問之。然後將p指標指向下一個邊結點。求有向圖的拓撲排序,在頭結點中增加一個存放頂點入度的陣列(indegree)。入度為零的頂點即為沒有前驅的頂點,刪除頂點及以它為尾的弧的操作,即可換為弧頭頂點的入度減1來實現。

三.設計流程圖


四.實現程式碼(部分)

第一步:設計主選單。

void main(){

int n;

do{

ShowMainMenu();

printf("請選擇:");

scanf("%d",&n);

switch(n){

case 1:LinkList();break;

case 2:Stack();break;

case 3:Array();break;

case 4:BiTree();break;

case 5:Graph();break;

case 6:break;

default:printf("ERROR!");break;

}

}while(n!=6);

}

void ShowMainMenu() {

       printf("\n");

       printf("*******************演算法與資料結構******************\n");

       printf("* 1  單鏈表的基本操作及應用                      *\n");

       printf("* 2  棧的基本操作及應用                          *\n");

       printf("* 3  陣列的基本操作及應用                        *\n");

       printf("* 4  樹的基本操作及應用                           *\n");

       printf("* 5  圖的基本操作及應用                          *\n");

       printf("* 6  退出                                        *\n");

       printf("***************************************************\n");

}

第二步:新增功能函式。

在程式合適的位置新增相應的函式實現各功能模組。

1、在語句printf("* 1  單鏈表的基本操作及應用   *\n”)新增實現單鏈表操作的函式。

StatusCreateList_L(LinkList&L, int n)//建立線性表

{

    InitList_L(L);

    int i;

    cout << "輸入要插入的連結串列個數:";

cin >> n;

    ElemTypee;

    for (i = 1; i <= n; i++)

    {

           cin >> e;

              ListInsert_L(L,i, e);

       }

  return OK;

}

2、在語句printf("* 2  棧的基本操作及應用     *\n");新增實現棧基本操作的函式:

void Push(STACK&S, ElemType e)  //壓棧

{

       SLinkList p;

     p =(SLinkList)malloc(sizeof(LNode));

      if (!p) exit(OVERFLOW);

       p->data = e;

       p->next = S.top;

       S.top = p;

}

3、稀疏矩陣

StatusCreateSMatrix(TSMatrix&M)

{

  cout << "請輸入稀疏矩陣的行數、列數和非零元個數:" <<endl;

  cin >> M.mu;

  cin >> M.nu;

  cin >> M.tu;

  for (int i = 1; i <= M.tu; i++)

  {

       cout << "請按行序輸入非零元素的值、行標和列標:" <<endl;

       cin >> M.data[i].e;

       cin >> M.data[i].i;

       cin >> M.data[i].j;

  }

  return OK;

}

4、二叉樹

intCreateBiTree(BiTree &T) {

  char data;

  //按次序輸入二叉樹中結點的值(一個字元),‘#’表示空樹 

  cin >> data;

  if (data == '#') {

    T = NULL;

  }

  else {

    if (!(T =(BiTNode*)malloc(sizeof(BiTNode))))

           exit(OVERFLOW);

    //生成根結點 

    T->data = data;

       //構造左子樹 

       CreateBiTree(T->lchild);

       //構造右子樹 

       CreateBiTree(T->rchild);

  }

  return 0;

}

5、圖的基本操作

Status CreateUDG(ALGraph&G)         //構造無向圖

{

       G.kind =1;

       cout<< "請輸入無向圖的頂點數和邊數:" << endl;

       cin>> G.vernum >> G.arcnum;

       int i, e;

       cout<< "輸入每個頂點的值:" << endl;

       for (i =1; i <= G.vernum; i++)

       {

              cin>> e;

              G.vertices[i- 1].data = e;

              G.vertices[i- 1].firstarc = 0;

       }

       int v1,v2;

       for (i =0; i < G.arcnum; i++)

       {

              cout<< "請輸入第" << i << "條弧所關聯的兩個點的位置:" << endl;

              cin>> v1 >> v2;

              ArcNode*q= (ArcNode*)malloc(sizeof(ArcNode));

              q->adjvex= v2 - 1;

              q->nextarc= G.vertices[v1 - 1].firstarc;

              G.vertices[v1- 1].firstarc = q;

              q =(ArcNode*)malloc(sizeof(ArcNode));

              q->adjvex= v1 - 1;

              q->nextarc= G.vertices[v2 - 1].firstarc;

              G.vertices[v2- 1].firstarc = q;

       }

       return OK;

}

五.實現結果

展示二叉樹部分執行結果:

1、建立二叉樹ABC##DE#G##F###

2、  計算樹的深度

3、遍歷二叉樹

4、赫夫曼編碼

六.心得總結

指導老師意見:

成績:                 教師簽名: 

年    月    日

相關推薦

資料結構課程設計實驗報告

《演算法與資料結構》課程設計報告                                        資料結構課程設計是在學完資料結構課程之後的實踐教學環節。本實踐教學是培養學生資料抽象能力,進行復雜程式設計的訓練過程。要求學生能對所涉及問題選擇合適的資料結構

哈理工-14級-大一到大四 (課程設計 + 實驗報告 + 自學視頻教程書籍 + 課件 + 作業 + 考試 復習資料) 應有盡有,雖然有過時的東西,但相信我,絕對有幹貨!!!

課程設計 nbsp 分享圖片 一課 class clas pos 報告 設計 歡迎學弟學妹們騷擾我哦,有需要的請留言私我哦!!! 聽說你不信, 來個栗子??,先:::上圖 大一課程: 大二課程: 大三課程: 哈理工-14級-大一到大四 (課程設計 +

資料結構課程設計之銀行活期儲存系統(設計報告

 C作為系統描述語言,既可以用來編寫系統軟體,也可以用來編寫應用軟體。C語言誕生後,許多原來用匯編語言編寫的軟體,現在都可以用C語言編寫;C++是一種靜態資料型別檢查的,支援多重程式設計正規化的通用程式設計語言。它支援過程化程式設計、資料

20172308 實驗二《程式設計與資料結構》樹 實驗報告

20172308 2018-2019-1 實驗2 《線性結構》報告 課程:《程式設計與資料結構》 班級: 1723 姓名: 周亞傑 學號:20172308 實驗教師:王志強 實驗日期:2018年11月5日 必修/選修: 必修 1.實驗內容 (1)樹之實現二叉樹:完成鏈樹LinkedBinaryTr

資料結構課程設計農夫過河

此部落格是隻是為了演示程式碼的執行結果 下面是一個程式執行的結果(實現了兩種過河方案)    部分程式碼截圖 原始碼下載地址 https:

資料結構課程設計-檢查網路(並查集)

檢查網路 給定一個計算機網路以及機器間的雙向連線列表,每一條連線與允許兩端的計算機進行直接的檔案傳輸,其他計算機間若存在一條連通路徑,也可以進行間接的檔案傳輸。 要求實現功能: 任意指定兩臺計算機,判斷整個網路中是否任意兩臺機器間都可以檔案傳輸?若不可以,請給出當前網路

資料結構課程設計——學生資訊管理系統

/*Copyright (c)2017,煙臺大學計算機與控制工程學院 *All rights reservrd. *作者:趙楷文 *完成時間:2017年12月20日 *版本號:v1.0 *問題描述:設計一個管理學生資訊的

學生成績管理系統(資料結構課程設計

學生成績管理問題  問題描述:建立兩個學生成績資訊表1、2,以檔案的形式分別進行儲存命名為1.txt和2.txt,然後實現將兩個檔案合併成一個新的檔案3.txt。 新檔案中有補考的學生查詢到,儲存到另一個檔案4.txt中。     基本要求:    

資料結構課程設計-哈夫曼編碼譯碼

//******************************************** //程式功能:哈夫曼編碼及譯碼 // //日期:2014年11月18 // //******************************************** #incl

課程設計實驗報告

《c++程式設計》課程設計報告 題目一: 來源:設一 1002 Problem B 題目簡述:“水仙花數”是指一個三位數,它的各位數字的立方和等於其本身,比如:153=13+53+3^3。輸入資料有多組,每組佔一行,包括兩個整數m和n(100<=m<=n<=999)

資料結構課程設計-哈夫曼樹及其應用

題目:假設用於通訊的電文由字符集{a,b,c,d,e,f,g,h,}中的字母構成,這8個字母在電文中出現的 頻率分別為: {0.19, 0.21, 0.02, 0.03, 0.06, 0.07, 0.1, 0.32}. 要求:畫出哈夫曼樹。 我從課本上面摘抄了一個題

內部排序演算法的實現與比較-資料結構課程設計

內部排序演算法的實現與比較 1) 問題描述 在教科書中,各種內部排序演算法的時間複雜度分析結果只給出了演算法執行時間的階,或大概執行時間。試通過隨機資料比較各演算法的關鍵字比較次數和關鍵字移動次數,以取得直觀感受。 2)基本要求 (1) 對常用的內部排序演算法進行比較:直接

資料結構課程設計~校園導航問題

校園導航問題 下邊發一下資料結構的課程設計:校園導航問題。 設計內容 (1)設計學校的平面圖(至少包括10個以上的場所)。每兩個場所間可以有不同的路徑,且路長也可能不同(圖形結構要求通過鍵盤輸入資料後採用建立圖的演算法生成圖形); (2)提供起始點與終點能自動找出從任意場所到達另

資料結構課程設計—學生資訊管理系統

問題描述: /* * Copyright (c)2015,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:aaaa.cbp * 作 者:張芸嘉 * 完成日期:2015年12月24日 * 版 本

資料結構——課程設計之~安排教學計劃

1. 問題描述 大學的每個專業都要制訂教學計劃。假設任何專業都有固定的學習年限,每學年含兩個學期,每學期的時間長度和學分上限值均相等。每個專業開設的課程都是確定的,而且課程在開設時間的安排必須滿足先修關係。每門課程有哪些先修課程是確定的,可以有任意多門,也可以沒有。每門課恰

資料結構課程設計-學生資訊管理系統

/* * 煙臺大學計算機與控制工程學院 *檔名稱:mian.cpp *作 者:王旭 *完成日期:2015年12月25日 *版 本 號:v1.0 *

資料結構課程設計---------用棧來實現表示式求值

1、需求分析 設計一個程式,演示用算符優先法對算術表示式求值的過程。利用算符優先關係,實現對算術四則混合運算表示式的求值。 (1)輸入的形式:表示式,例如2*(3+4)      包含的運算子只能有'+' 、'-' 、'*' 、'/' 、'('、 ')'; (2)輸出的形式

資料結構課程設計《銀行存取款系統》

/*********標頭檔案**********/ #include <iostream.h> #include <Cstring> #include <string.h> #include <stdio.h> #includ

資料結構課程設計---------最少換車次數問題

        問題描述: 設某城市有n個車站,並有m條公交線路連線這些車站。設這些公交車都是單向的,這n個車站被順序編號為0~n-1。編號程式,輸入該城市的公交線路數,車站個數,以及各公交線路上的各站編號。        實現要求:求得從站0出發乘公交車至站n一1的最少換

資料結構課程設計--圖書館管理系統原始碼

#include <iostream> #include <iomanip> #include <string.h> #include <string> #include <fstream>//輸入/輸出檔案流類