線性表的鏈式表示和實現_第1頁
線性表的鏈式表示和實現_第2頁
線性表的鏈式表示和實現_第3頁
線性表的鏈式表示和實現_第4頁
線性表的鏈式表示和實現_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上數學與計算科學學院實 驗 報 告實驗項目名稱 線性表的鏈式表示和實現 所屬課程名稱 數據結構 實 驗 類 型 驗證型 實 驗 日 期 2013年10月31日 班 級 學 號 姓 名 成 績 一、實驗概述:【實驗目的】1.線性表的邏輯結構特征 1.1 總存在第一個和最后一個元素; 1.2 除第一個元素以外,每個元素總存在唯一一個直接前驅元素; 1.3 除最后一個元素以外,每個元素總存在唯一一個直接后繼元素。2.掌握單鏈表的基本操作在鏈式存儲結構上的實現。【實驗原理】1.線性鏈表的特點 1.1 線性鏈表是一種動態分配的存儲結構; 1.2 每一個結點的指針域指向其直接后繼結

2、點(偽結點除外); 1.3 指針為數據元素之間的邏輯關系的映像。2.線性表的單鏈表存儲結構Typedef struct LNode ElemType data;struct LNode *next;LNode, *LinkList;【實驗環境】 VC+6.0二、實驗內容:【實驗方案】編寫主函數,調用線性鏈表的初始化建空表,查找、插入和刪除算法,調試運行,得出結果。【實驗過程】(實驗步驟、記錄、數據、分析)一典型錯誤舉例及改正措施例 錯誤分析:過于大意,直接將上一次算法之前的定義之類的內C語言復制過來,導致將線性表的單鏈表存儲結構輸成線性表的動態分配順序存儲結構。然后就出來上述LinkList未

3、定義,L未定義,還有掉分號,掉括號之類的各種錯誤。二完善主函數及過程錯誤分析 以上輸出窗口這種形式的輸出容易使人輸完一步,然后忘記下一步該干嘛,于是這時候完善一下主函數,使得輸出窗口每一步操作之前都加上提示語會更好。以下是完善主函數的過程:1.在主函數每一項輸入之前加上一串漢字提示下一步的操作,于是主函數部分變為 然后調試,發現報出如下錯誤:(后面還有好多行,這里只列舉一部分)錯誤分析:printf后面括號中的引號應為因為格式,這里卻輸成中文格式了,故報出以上錯誤。錯誤改正之后,調試:0錯誤,0警告。運行結果: 2.觀察上述運行結果發現,輸出窗口還是不夠完善,這里只有提示下一步的操作,但是沒有

4、顯示操作之后輸出的一串數字具體是什么。于是在主函數中繼續加相應格式的漢字提示,得到:然后調試:0錯誤,0警告。運行結果:至此,主函數完善完畢。三測試數據1.前面幾次運行,單鏈表的數字都比較簡單且連續,于是換些比較復雜一點的數字測試,結果: 觀察輸出窗口,發現該組數據測試無誤。2當實際輸入的元素個數小于理論上應該輸入的個數n時,就按了Enter鍵,第三行不會顯示任何數據,但是有一個閃動光標暗示我們還需繼續輸入,當輸入個數剛好等于n時,按Enter鍵,還是一樣會逆序位輸出原來的單鏈線性表L。 但是當實際輸入元素個數大于n時,會自動逆序位輸出前n個元素,除了查找元素會報錯,其他都按前n個元素輸入正常

5、運行。3.當輸入的鏈表中的元素不是數字而是字母時會報錯:【實驗結論】(結果)【實驗小結】(收獲體會)通過此次上機實驗,除了對程序中主函數的編寫及程序的完善有了很大的突破之外,還熟悉并實踐了單鏈線性表的逆序位輸出、查找、插入和刪除算法。由于吸取上次教訓,此次敲算法時格外小心注意,因此這次一些語句語法錯誤之類的錯誤就沒有了,但是對程序的完善過程卻有了很大感悟,一個好的程序不僅只是要把結果運行出來,而且要讓人們在操作時更加便捷。三、指導教師評語及成績:評 語評語等級優良中及格不及格1.實驗報告按時完成,字跡清楚,文字敘述流暢,邏輯性強2.實驗方案設計合理3.實驗過程(實驗步驟詳細,記錄完整,數據合理

6、,分析透徹)4實驗結論正確. 成 績: 指導教師簽名: 批閱日期:附錄1:源 程 序#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct LNode ElemType data;struct LNode *next;LNode, *LinkList;void CreateList_L(LinkList &L

7、,int n) /逆序位輸入n個元素的值,建立帶表頭結點的單鏈線性表L。 int i;LinkList p;L=(LinkList) malloc (sizeof (LNode);L->next=NULL; /先建立一個帶表頭結點的單鏈表for (i=n;i>0;-i) p=(LinkList) malloc (sizeof (LNode); /生成新結點scanf("%d",&p->data);p->next=L->next;L->next=p;/CreateList_LStatus GetElem_L(LinkList L,i

8、nt i,ElemType &e) /L為帶表頭結點的單鏈表的頭指針。/當第i個元素存在時,其值賦給e并返回OK,否則返回ERRORint j;LinkList p;p=L->next;j=1; /初始化,p指向第一個結點,j為計數器while (p&&j<i) /順指針向后查找,直到p指向第i個元素或p為空p=p->next;+j;if (!p|j>i) return ERROR; /第i個元素不存在e=p->data; /取第i個元素return OK;/GetElem_LStatus ListInsert_L(LinkList L,i

9、nt i,ElemType e) /在帶頭結點的單鏈線性表L中第i個位置之前插入元素eLinkList p,s;int j;p=L;j=0;while (p&&j<i-1) p=p->next;+j; /尋找第i-1個結點if (!p|j>i-1) return ERROR; /i小于1或者大于表長加1s=(LinkList) malloc (sizeof(LNode); /生成新結點s->data=e;s->next=p->next; p->next=s;return OK;/ ListInsert_LStatus ListDelet

10、e_L(LinkList &L,int i,ElemType &e) /在帶表頭結點的單鏈線性表L中,刪除第i個元素,并由e返回其值int j;LinkList p,q;p=L;j=0;while (p->next&&j<i-1) /尋找第i個結點并令p指向其前驅p=p->next; +j;if (!(p->next)|j>i-1) return ERROR; /刪除位置不合理q=p->next;p->next=q->next; /刪除并釋放結點e=q->data; free(q);return OK;/Li

11、stDelete_Lvoid main() LinkList L,q;int n,i; printf("請輸入您要創建的單鏈線性表L中的元素個數:"); scanf("%d",&n);CreateList_L(L,n); /創建一個單鏈線性表Lprintf("您創建的單鏈線性表L為:");for(q=L->next;q!=NULL;q=q->next) printf("%d ",q->data);printf("n");ElemType e; /定義函數參數為ElemT

12、ype類型printf("請輸入您需要查找元素的位置i:");scanf("%d",&i);GetElem_L(L,i,e); /查找單鏈線性表L中第i個位置上的元素,并用e返回其值printf("您查找的元素為:");printf("e=%dn",e); printf("請輸入您需要插入的元素的位置i及相應的元素值e:");scanf("%d%d",&i,&e);ListInsert_L(L,i,e); /在單鏈線性表L中第i個位置之前插入新的數據元

13、素eprintf("插入后的單鏈線性表L為:");for(q=L->next;q!=NULL;q=q->next)printf("%d ",q->data);printf("n"); printf("請輸入您需要刪除的元素的位置i:");scanf("%d",&i);ListDelete_L(L,i,e); /刪除單鏈線性表L中第i位置上的數據元素printf("刪除第i個位置上的元素e后的單鏈線性表L為:");for(q=L->next;q!=NULL;q=q->next)printf("%d ",q->data);printf("n");附錄2:實驗報告填寫說明 1實驗項目名稱:要求與實驗教學大綱一致。2實驗目的:目的要明確,要抓住重點,符合實驗教學大綱要求。3實驗原理:簡要說明本實驗項目所涉及的理論知識。4實驗環境:實驗用的軟、硬件環境。5實驗方案(思路、步驟和方法等):這是實驗報告極其重要的內容。概括整個實驗過程。對于驗證性實驗,要寫明依據何種原理、操作方法進行實驗,要寫明需要經過哪幾個步驟來實現其操作。對于設計性

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論