數(shù)據(jù)結(jié)構(gòu)順序表的實現(xiàn)的課程設(shè)計報告_第1頁
數(shù)據(jù)結(jié)構(gòu)順序表的實現(xiàn)的課程設(shè)計報告_第2頁
數(shù)據(jù)結(jié)構(gòu)順序表的實現(xiàn)的課程設(shè)計報告_第3頁
數(shù)據(jù)結(jié)構(gòu)順序表的實現(xiàn)的課程設(shè)計報告_第4頁
數(shù)據(jù)結(jié)構(gòu)順序表的實現(xiàn)的課程設(shè)計報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)前言1.1設(shè)計背景和意義1.1.1數(shù)據(jù)結(jié)構(gòu)簡介 數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運行或者存儲效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)有關(guān)。1.1.2選擇算法的原因在許多類型的程序的設(shè)計中數(shù)據(jù)結(jié)構(gòu)的選擇是一個基本的設(shè)計考慮因素。許多大型系統(tǒng)的構(gòu)造經(jīng)驗表明,系統(tǒng)實現(xiàn)的困難程度和系統(tǒng)構(gòu)造的質(zhì)量都嚴重的依賴于是否選擇了最優(yōu)的數(shù)據(jù)結(jié)構(gòu)。許多時候,確定了數(shù)據(jù)結(jié)構(gòu)后,算法

2、就容易得到了。有些時候事情也會反過來,我們根據(jù)特定算法來選擇數(shù)據(jù)結(jié)構(gòu)與之適應(yīng)。不論哪種情況,選擇合適的數(shù)據(jù)結(jié)構(gòu)都是非常重要的。1.2設(shè)計的原理線性表是最常用的而且也是最簡單的一種數(shù)據(jù)結(jié)構(gòu),線性表是N個數(shù)據(jù)元素的有限序列。例如26個英文元素的字母表:(A,B,C,D,)。其數(shù)據(jù)結(jié)構(gòu)的描述為:Linear list=(D,R)其中:D=ai|ai屬于D0,i=1,2,3,R=N,N=|i=2,3,4,。本實驗是以數(shù)組的形式把有序表存放在計算機內(nèi)存的一個連續(xù)的區(qū)域內(nèi),這樣便有:LOC(ai+1)=LOC(ai)+m。其中m是存放每個元素所占的內(nèi)存字數(shù)。LOC(ai)=LO+m(i-1)。其中LO是a

3、i的地址,即首地址。工程概況2.1 項目所用的時間從這個項目開始到結(jié)束總共歷時7天。完成于2011年12月2.2項目負責(zé)人李歡,男,計算機科學(xué)與技術(shù)14-4,學(xué)生。2.3項目指導(dǎo)人朱賴紅,男,信息工程學(xué)院教師,講師。正文順序表是在計算機內(nèi)存中以數(shù)組的形式保存的線性表,是指用一組地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu)。線性表采用順序存儲的方式存儲就稱之為順序表。順序表是將表中的結(jié)點依次存放在計算機內(nèi)存中一組地址連續(xù)的存儲單元中3.1 設(shè)計的目的和意義我們是計算機科學(xué)與技術(shù)專業(yè)的本科生,數(shù)據(jù)結(jié)構(gòu)是我們重要的必修課程。當(dāng)代社會學(xué)要大學(xué)培養(yǎng)出理論扎實,動手實踐能力強的大學(xué)生。所以,本次課程設(shè)計的

4、目的就在于通過一次實踐性的活動加深對這門課程的理解,使我們在感性的認識上進一步升華為理性的認識。為后繼課程的學(xué)習(xí)打下堅實的基礎(chǔ)。馬克思主義唯物辯證法認為,實踐是連接客觀實在和人主觀意識的通道和橋梁。物質(zhì)對意識的作用以及意識對物質(zhì)的反作用都蘊含在實踐活動當(dāng)中。也就是,實踐是檢驗真理的唯一標(biāo)準(zhǔn)。對這門課的學(xué)習(xí)狀況的好壞,用一次課程設(shè)計便可以檢驗出來。而這,就是本次我們進行設(shè)計的意義之所在。3.2 目的和總體方案順序表存儲位置是相鄰連續(xù)的,可以隨即訪問的一種數(shù)據(jù)結(jié)構(gòu),一個順序表在使用前必須指定起長度,一旦分配內(nèi)存,則在使用中不可以動態(tài)的更改。他的優(yōu)點是訪問數(shù)據(jù)是比較方便,可以隨即的訪問表中的任何一個

5、數(shù)據(jù)。目的:1、理解和掌握順序表的結(jié)構(gòu)類型定義方法。2、掌握建立順序表的基本方法。3、掌握顯示順序表元素的基本方法。由于時間只有十天,故做了如下的計劃安排,將這項工程分為兩大部分:程序的設(shè)計和程序的調(diào)試。首先在程序的設(shè)計部分由分為幾個步驟:第一步:查閱有關(guān)數(shù)據(jù)結(jié)構(gòu)順序表操作的資料,用一天的時間。第二步:設(shè)計這個項目的整體架構(gòu)和算法。用一到兩天的時間。第三步:選擇一門程序設(shè)計語言進行算法的描述。兩天的時間。其次,進行程序的調(diào)試。用一天。3.3 設(shè)計方法和內(nèi)容“工欲善其事,必先利其器”。有了總體方案后必須用一個事半功倍的設(shè)計方法來提高程序設(shè)計的效率。在這個項目的設(shè)計上,我選擇了語言作為算法的描述語

6、言,因為語言具有豐富的表達能力以及代碼的高效性,并且有著良好的移植性和靈活性。同時,采用“自頂向下,個個擊破”的程序設(shè)計思路和思想,充分運用語言強大的功能。我將這個項目整體設(shè)分成了兩個模塊。一個是功能函數(shù)模塊群,主要實現(xiàn)設(shè)計方案中的具體功能,是整個項目的執(zhí)行部分;另一個是主函數(shù)模塊,主要實現(xiàn)對數(shù)據(jù)流和控制流的控制,使整個項目的控制部分。這兩大模塊有機的結(jié)合共同構(gòu)成了這個項目的全部面貌。3.3.1 硬件環(huán)境微型計算機:聯(lián)想臺式品牌機中央處理器:Pentuim 4 主頻:3.0GHz主存容量: 512M硬盤容量: 80G3.3.2軟件環(huán)境Windows XP 操作系統(tǒng)Microsoft NoteP

7、ad 記事本程序Microsoft Visual C+編譯器3.3.3 設(shè)計流程圖開始開始順序表元素的插入元素的檢索刪除一個元素輸出表和讀表建立表長為7的順序表SWICH語句圖3-1 程序流程圖3.3.4設(shè)計內(nèi)容一、程序設(shè)計的基本算法介紹1、順序表的存儲特點是:只要確定了起始位置,表中任一元素的地址都通過下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1in 其中,L是元素占用存儲單元的長度。3.4 程序的設(shè)計思想和內(nèi)容1 順序?qū)崿F(xiàn)設(shè)計思路:我沒有直接用數(shù)組的存儲方式,而是采用連續(xù)分配內(nèi)存的方式或者說我把數(shù)組實現(xiàn)的代碼寫了出來,沒有直接用庫里面的數(shù)組形式。每次分配的數(shù)量為常量LI

8、STINCREASMENT。程序流程:新建一個順序表(初始表長為7)顯示構(gòu)建的表及表長依次檢驗刪除,插入檢索功能并顯示操作后的順序表3.4.1程序設(shè)計的初始運行環(huán)境這個項目是由主函數(shù)模塊和功能函數(shù)模塊組成的。其中主函數(shù)模塊是項目的控制部分,很重要的一個作用就是對整個程序的初始化功能。在設(shè)計初始運行環(huán)境時,為了每一次棧操作后都可以進行對程序的初始化,采用了dowhile循環(huán)語句構(gòu)成一個無限循環(huán),使得每一次棧操作之后都可以將程序初始化重新選擇對棧的另一個操作,例如:選擇2,將若干個數(shù)據(jù)壓入棧中之后,程序便又回到了初始的界面,我們可以選擇4進行出棧操作。代碼如下:#include #include

9、#include #include #include#defineLISTINCREASMENT 2#define LISTSIZE 5typedef int ElemType;typedef structElemType * elem;int length;int listsize; Sqlist;void SqInitial(Sqlist *ps) ps-elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType); ps-length=0; ps-listsize=LISTSIZE;void ListInsert(Sqlist *ps,int i

10、,ElemType e) if(ilength=ps-listsize) ElemType*newbase=(ElemType*)realloc(ps-elem,(ps-listsize+LISTINCREASMENT)*sizeof(ElemType); ps-elem=newbase; ps-listsize+=LISTINCREASMENT; ElemType * q=&(ps-elemi-1);ElemType * p;for(p=&(ps-elemps-length-1);p=q;-p) *(p+1)=*p;*q=e;+ps-length;void ListDelete(Sqlist

11、 *ps,int i,ElemType e) if(ips-length) printf(ERROR!); ElemType * p=&(ps-elemi-1); e=*p; ElemType * q=ps-length+ps-elem-1;for(+p;plength;ElemType GetElem(Sqlist *ps,int i) if(ips-length) printf(ERROR!); return ps-elemi-1;void main()Sqlist *L; int t =1 ,d; L=new Sqlist; SqInitial(L); printf(構(gòu)建長度為7的順序表

12、。n); for(t=1;tlength);for(t=1;tlength;t+)printf( %d ,L-elemt-1);printf(n刪除的位置:);scanf(%d,&t); ListDelete(L,t,d);printf( 刪除元素的值:%dn,d);printf( 刪除后的表:);for(t=1;tlength;t+)printf( %d ,L-elemt-1);printf(n要插入的位置); scanf(%d,&t); printf(要插入的值); scanf(%d,&d); ListInsert(L,t,d);printf( 插入以后的表:); for(t=1;tlen

13、gth;t+)printf( %d ,L-elemt-1);printf(n要檢索的元素的位置:);scanf(%d,&t); d=GetElem(L,t);printf( 該元素的值為:%dn,d); 具體運行截面如下圖:圖3-2 界面的循環(huán)初始化3.4.2順序表的初始化具體代碼如下:void SqInitial(Sqlist *ps) ps-elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType); ps-length=0; ps-listsize=LISTSIZE;3.4.3順序表的插入構(gòu)建長度為7的順序表具體程序代碼及運行后的界面如下:vo

14、id main()Sqlist *L; int t =1 ,d; L=new Sqlist; SqInitial(L); printf(構(gòu)建長度為7的順序表。n); for(t=1;tlength); for(t=1;tlength;t+)printf( %d ,L-elemt-1);圖為兩個數(shù)據(jù)的運行結(jié)果:圖3-4 棧元素的刪除操作。 3.4.順序表的刪除操作順序表的刪除的具體代碼如下:printf(n刪除的位置:);scanf(%d,&t); ListDelete(L,t,d);printf( 刪除元素的值:%dn,d);printf( 刪除后的表:);for(t=1;tlength;t+

15、)printf( %d ,L-elemt-1); 圖為刪除元素與刪除后的運行結(jié)果:3.5.元素的插入具體代碼如下:printf(n要插入的位置); scanf(%d,&t); printf(要插入的值); scanf(%d,&d); ListInsert(L,t,d);printf( 插入以后的表:); for(t=1;tlength;t+) printf( %d ,L-elemt-1);圖為元素插入以及插入后的表:3.6.檢索元素檢索元素的具體代碼如下:printf(n要檢索的元素的位置:);scanf(%d,&t); d=GetElem(L,t);printf( 該元素的值為:%dn,d)

16、; 圖為檢索元素后的運行:圖3-5 出棧操作3.5 設(shè)計創(chuàng)新與關(guān)鍵技術(shù)這個課程設(shè)計是一個簡單的設(shè)計,如果說有“設(shè)計創(chuàng)新與關(guān)鍵技術(shù)”的話,只能勉強說有設(shè)計創(chuàng)新,至于關(guān)鍵技術(shù)應(yīng)該談不上。談到設(shè)計創(chuàng)新,只能說在設(shè)計思路、設(shè)計方法和設(shè)計內(nèi)容上有別人沒有的東西。而所用的技術(shù)倒是沒有多少。主要是運用了C語言豐富的表達能力,將棧的建立、進棧、出棧等操作形象的反應(yīng)出來。3.6結(jié)論本次設(shè)計進展順利,如期完成,并且達到了預(yù)先的設(shè)計要求,完全貫徹和執(zhí)行了設(shè)計的總體方案。對于棧的基本操作的描述和實現(xiàn)比較成功。然而,限于時間和水平,這個設(shè)計還有很多的不足之處。3.6.1存在的問題 一、沒有使用圖形的形式描述棧的操作。主

17、要是因為本設(shè)計主要是在MicroSoft Visual C+編譯器調(diào)試,但VC的根目錄下的Include文件夾中沒有g(shù)raphics.h這個頭文件。因此,在Turbo C下編譯成功的地源程序在VC中無法編譯通過。二、所有的對棧的操作只能當(dāng)棧被初始化以后方可進行。當(dāng)棧被一次初始化后,所有的進棧操作只能進行一次,如果想在進行了其他的棧操作后再次進棧是不行的。3.6.2解決方案一、針對VC中沒有g(shù)raphics.h頭文件的問題,可以到互聯(lián)網(wǎng)上求助高手或自己到圖書館查閱相關(guān)的書籍。二、針對進棧要等待初始化的問題,原因在于經(jīng)過其他的棧操作改變了棧頂指針的位置,而第一次進棧是在空棧的基礎(chǔ)之上,而有了數(shù)據(jù)再想進棧便違反了棧“先進后出”的原則了。可以進行如下操作,將棧的結(jié)構(gòu)體中的棧頂指針定義為一個全局變量或靜態(tài)變量。這樣,便可以保證進棧的不受限制,可隨時進棧。參考文獻1嚴蔚敏.

溫馨提示

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

評論

0/150

提交評論