歡迎光臨管理范文網(wǎng)
當(dāng)前位置:工作總結(jié) > 總結(jié)大全 > 總結(jié)范文

數(shù)據(jù)結(jié)構(gòu)總結(jié)(三篇)

發(fā)布時(shí)間:2023-04-08 14:30:04 查看人數(shù):58

數(shù)據(jù)結(jié)構(gòu)總結(jié)

【第1篇 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)總結(jié)

數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)總結(jié)篇一

本次課程設(shè)計(jì),使我對《數(shù)據(jù)結(jié)構(gòu)》這門課程有了更深入的理解?!稊?shù)據(jù)結(jié)構(gòu)》是一門實(shí)踐性較強(qiáng)的課程,為了學(xué)好這門課程,必須在掌握理論知識的同時(shí),加強(qiáng)上機(jī)實(shí)踐。

我的課程設(shè)計(jì)題目是線索二叉樹的運(yùn)算。剛開始做這個(gè)程序的時(shí)候,感到完全無從下手,甚至讓我覺得完成這次程序設(shè)計(jì)根本就是不可能的,于是開始查閱各種資料以及參考文獻(xiàn),之后便開始著手寫程序,寫完運(yùn)行時(shí)有很多問題。特別是實(shí)現(xiàn)線索二叉樹的刪除運(yùn)算時(shí)很多情況沒有考慮周全,經(jīng)常運(yùn)行出現(xiàn)錯(cuò)誤,但通過同學(xué)間的幫助最終基本解決問題。

在本課程設(shè)計(jì)中,我明白了理論與實(shí)際應(yīng)用相結(jié)合的重要性,并提高了自己組織數(shù)據(jù)及編寫大型程序的能力。培養(yǎng)了基本的、良好的程序設(shè)計(jì)技能以及合作能力。這次課程設(shè)計(jì)同樣提高了我的綜合運(yùn)用所學(xué)知識的能力。并對vc有了更深入的了解。《數(shù)據(jù)結(jié)構(gòu)》是一門實(shí)踐性很強(qiáng)的課程,上機(jī)實(shí)習(xí)是對學(xué)生全面綜合素質(zhì)進(jìn)行訓(xùn)練的一種最基本的方法,是與課堂聽講、自學(xué)和練習(xí)相輔相成的、必不可少的一個(gè)教學(xué)環(huán)節(jié)。上機(jī)實(shí)習(xí)一方面能使書本上的知識變“活”,起到深化理解和靈活掌握教學(xué)內(nèi)容的目的;另一方面,上機(jī)實(shí)習(xí)是對學(xué)生軟件設(shè)計(jì)的綜合能力的訓(xùn)練,包括問題分析,總體結(jié)構(gòu)設(shè)計(jì),程序設(shè)計(jì)基本技能和技巧的訓(xùn)練。此外,還有更重要的一點(diǎn)是:機(jī)器是比任何教師更嚴(yán)厲的檢查者。因此,在“數(shù)據(jù)結(jié)構(gòu)”的學(xué)習(xí)過程中,必須嚴(yán)格按照老師的要求,主動(dòng)地、積極地、認(rèn)真地做好每一個(gè)實(shí)驗(yàn),以不斷提高自己的編程能力與專業(yè)素質(zhì)。

通過這段時(shí)間的課程設(shè)計(jì),我認(rèn)識到數(shù)據(jù)結(jié)構(gòu)是一門比較難的課程。需要多花時(shí)間上機(jī)練習(xí)。這次的程序訓(xùn)練培養(yǎng)了我實(shí)際分析問題、編程和動(dòng)手能力,使我掌握了程序設(shè)計(jì)的基本技能,提高了我適應(yīng)實(shí)際,實(shí)踐編程的能力。

總的來說,這次課程設(shè)計(jì)讓我獲益匪淺,對數(shù)據(jù)結(jié)構(gòu)也有了進(jìn)一步的理解和認(rèn)識。

數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)總結(jié)篇二

這學(xué)期開始兩周時(shí)間是我們自己選題上機(jī)的時(shí)間, 這學(xué)期開始兩周時(shí)間是我們自己選題上機(jī)的時(shí)間,雖然 上機(jī)時(shí)間只有短短兩個(gè)星期但從中確實(shí)學(xué)到了不少知識。 上機(jī)時(shí)間只有短短兩個(gè)星期但從中確實(shí)學(xué)到了不少知識。數(shù) 據(jù)結(jié)構(gòu)可以說是計(jì)算機(jī)里一門基礎(chǔ)課程, 據(jù)結(jié)構(gòu)可以說是計(jì)算機(jī)里一門基礎(chǔ)課程,但我覺得我們一低 計(jì)算機(jī)里一門基礎(chǔ)課程 定要把基礎(chǔ)學(xué)扎實(shí), 定要把基礎(chǔ)學(xué)扎實(shí),然而這次短短的上機(jī)幫我又重新鞏固了 c 語言知識,讓我的水平又一部的提高。數(shù)據(jù)結(jié)構(gòu)這是一門 語言知識 讓我的水平又一部的提高。數(shù)據(jù)結(jié)構(gòu)這是一門 知識, 純屬于設(shè)計(jì)的.科目,它需用把理論變?yōu)樯蠙C(jī)調(diào)試。

純屬于設(shè)計(jì)的科目,它需用把理論變?yōu)樯蠙C(jī)調(diào)試。它對我們 來說具有一定的難度。它是其它編程語言的一門基本學(xué)科。 來說具有一定的難度。它是其它編程語言的一門基本學(xué)科。 我選的上機(jī)題目是交叉合并兩個(gè)鏈表,對這個(gè)題目, 我選的上機(jī)題目是交叉合并兩個(gè)鏈表,對這個(gè)題目,我 覺得很基礎(chǔ)。剛開始調(diào)試代碼的時(shí)候有時(shí)就是一個(gè)很小的錯(cuò) 覺得很基礎(chǔ)。剛開始調(diào)試代碼的時(shí)候有時(shí)就是一個(gè)很小的錯(cuò) 調(diào)試代碼的時(shí)候 誤,導(dǎo)致整個(gè)程序不能運(yùn)行,然而開始的我還沒從暑假的狀 導(dǎo)致整個(gè)程序不能運(yùn)行, 態(tài)轉(zhuǎn)到學(xué)習(xí)上,每當(dāng)程序錯(cuò)誤時(shí)我都非常焦躁, 態(tài)轉(zhuǎn)到學(xué)習(xí)上,每當(dāng)程序錯(cuò)誤時(shí)我都非常焦躁,甚至想到了 放棄,但我最終找到了狀態(tài),一步一步慢慢來, 放棄,但我最終找到了狀態(tài),一步一步慢慢來,經(jīng)過無數(shù)次 的檢查程序錯(cuò)誤的原因后慢慢懂得了耐心是一個(gè)人成功的 必然具備的條件! 同時(shí),通過此次課程設(shè)計(jì)使我了解到, 必然具備的條件! 同時(shí),通過此次課程設(shè)計(jì)使我了解到, 硬件語言必不可缺少,要想成為一個(gè)有能力的人,必須懂得 件語言必不可缺少,要想成為一個(gè)有能力的人, 硬件基礎(chǔ)語言。在這次課程設(shè)計(jì)中, 硬件基礎(chǔ)語言。

在這次課程設(shè)計(jì)中,雖然不會(huì)成功的編寫一 個(gè)完整的程序,但是在看程序的過程中, 個(gè)完整的程序,但是在看程序的過程中,不斷的上網(wǎng)查資料 以及翻閱相關(guān)書籍,通過不斷的模索,測試,發(fā)現(xiàn)問題, 以及翻閱相關(guān)書籍,通過不斷的模索,測試,發(fā)現(xiàn)問題,解決問題和在老師的幫助下一步一步慢慢的正確運(yùn)行程序, 決問題和在老師的幫助下一步一步慢慢的正確運(yùn)行程序,終 于完成了這次課程設(shè)計(jì), 于完成了這次課程設(shè)計(jì),雖然這次課程設(shè)計(jì)結(jié)束了但是總覺 得自已懂得的知識很是不足,學(xué)無止境, 得自已懂得的知識很是不足,學(xué)無止境,以后還會(huì)更加的努 力深入的學(xué)習(xí)。 力深入的學(xué)習(xí)。

【第2篇 2023年計(jì)算機(jī)二級《公共基礎(chǔ)》知識總結(jié):數(shù)據(jù)結(jié)構(gòu)的基本概念

1.2 數(shù)據(jù)結(jié)構(gòu)的基本概念

考點(diǎn)3 數(shù)據(jù)結(jié)構(gòu)的定義

考試鏈接:

考點(diǎn)3在筆試考試中,是一個(gè)經(jīng)??疾榈膬?nèi)容,在筆試考試中出現(xiàn)的幾率為70%,主要是以選擇的形式出現(xiàn),分值為2分,此考點(diǎn)為識記內(nèi)容,讀者還應(yīng)該識記數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)的概念。

數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)的一門學(xué)科,主要研究和討論以下三個(gè)方面:

(1)數(shù)據(jù)集合中個(gè)數(shù)據(jù)元素之間所固有的邏輯關(guān)系,即數(shù)據(jù)的邏輯結(jié)構(gòu);

(2)在對數(shù)據(jù)元素進(jìn)行處理時(shí),各數(shù)據(jù)元素在計(jì)算機(jī)中的存儲(chǔ)關(guān)系,即數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu);

(3)對各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算。

數(shù)據(jù):是對客觀事物的符號表示,在計(jì)算機(jī)科學(xué)中是指所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號的總稱。

數(shù)據(jù)元素:是數(shù)據(jù)的基本單位,在計(jì)算機(jī)程序中通常作為一個(gè)整體進(jìn)行考慮和處理。

數(shù)據(jù)對象:是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個(gè)子集。

數(shù)據(jù)的邏輯結(jié)構(gòu)是對數(shù)據(jù)元素之間的邏輯關(guān)系的描述,它可以用一個(gè)數(shù)據(jù)元素的集合和定義在此集合中的若干關(guān)系來表示。數(shù)據(jù)的邏輯結(jié)構(gòu)有兩個(gè)要素:一是數(shù)據(jù)元素的集合,通常記為d;二是d上的關(guān)系,它反映了數(shù)據(jù)元素之間的前后件關(guān)系,通常記為r。一個(gè)數(shù)據(jù)結(jié)構(gòu)可以表示成

b=(d,r)

其中b表示數(shù)據(jù)結(jié)構(gòu)。為了反映d中各數(shù)據(jù)元素之間的前后件關(guān)系,一般用二元組來表示。

數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式稱為數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)(也稱數(shù)據(jù)的物理結(jié)構(gòu))。

由于數(shù)據(jù)元素在計(jì)算機(jī)存儲(chǔ)空間中的位置關(guān)系可能與邏輯關(guān)系不同,因此,為了表示存放在計(jì)算機(jī)存儲(chǔ)空間中的各數(shù)據(jù)元素之間的邏輯關(guān)系(即前后件關(guān)系),在數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)中,不僅要存放各數(shù)據(jù)元素的信息,還需要存放各數(shù)據(jù)元素之間的前后件關(guān)系的信息。

一種數(shù)據(jù)的邏輯結(jié)構(gòu)根據(jù)需要可以表示成多種存儲(chǔ)結(jié)構(gòu),常用的存儲(chǔ)結(jié)構(gòu)有順序、鏈接、索引等存儲(chǔ)結(jié)構(gòu)。而采用不同的存儲(chǔ)結(jié)構(gòu),其數(shù)據(jù)處理的效率是不同的。因此,在進(jìn)行數(shù)據(jù)處理時(shí),選擇合適的存儲(chǔ)結(jié)構(gòu)是很重要的。

考點(diǎn)4 線性結(jié)構(gòu)與非線性結(jié)構(gòu)

考試鏈接:

考點(diǎn)4在筆試考試中,雖然說不是考試經(jīng)常考查的內(nèi)容,但讀者還是對此考點(diǎn)有所了解,在筆試考試中出現(xiàn)的幾率為30%,主要是以填空題出現(xiàn)的形式出現(xiàn),分值為2分,此考點(diǎn)為識記內(nèi)容。

根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分為兩大類型:線性結(jié)構(gòu)與非線性結(jié)構(gòu)。如果一個(gè)非空的數(shù)據(jù)結(jié)構(gòu)滿足下列兩個(gè)條件:

(1)有且只有一個(gè)根結(jié)點(diǎn);

(2)每一個(gè)結(jié)點(diǎn)最多有一個(gè)前件,也最多有一個(gè)后件。

則稱該數(shù)據(jù)結(jié)構(gòu)為線性結(jié)構(gòu)。線性結(jié)構(gòu)又稱線性表。在一個(gè)線性結(jié)構(gòu)中插入或刪除任何一個(gè)結(jié)點(diǎn)后還應(yīng)是線性結(jié)構(gòu)。如果一個(gè)數(shù)據(jù)結(jié)構(gòu)不是線性結(jié)構(gòu),則稱之為非線性結(jié)構(gòu)。

疑難解答:空的數(shù)據(jù)結(jié)構(gòu)是線性結(jié)構(gòu)還是非線性結(jié)構(gòu)?

一個(gè)空的數(shù)據(jù)結(jié)構(gòu)究竟是屬于線性結(jié)構(gòu)還是屬于非線性結(jié)構(gòu),這要根據(jù)具體情況來確定。如果對該數(shù)據(jù)結(jié)構(gòu)的算法是按線性結(jié)構(gòu)的規(guī)則來處理的,則屬于線性結(jié)構(gòu);否則屬于非線性結(jié)構(gòu)。

【第3篇 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告總結(jié)

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告總結(jié)

設(shè)計(jì)題目:模擬計(jì)算器程序

學(xué)生姓名:謝先斌

系 別:計(jì)算機(jī)與通信工程學(xué)院

專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)

班 級:1班

學(xué) 號:541007010144

指導(dǎo)教師:盧冰 李曄

2012 年 6 月 21 日

鄭州輕工業(yè)學(xué)院

課 程 設(shè) 計(jì) 任 務(wù) 書

題目 模擬計(jì)算器程序

專業(yè)、班級 計(jì)算機(jī)科學(xué)與技術(shù)10-01班 學(xué)號 541007010144 姓名 謝先斌

主要內(nèi)容:

設(shè)計(jì)一個(gè)模擬計(jì)算器的程序,要求能對包含加、減、乘、除、括號運(yùn)算符及sqr和abs函數(shù)的任意整型表達(dá)式進(jìn)行求解。

基本要求:

要檢查有關(guān)運(yùn)算的條件,并對錯(cuò)誤的條件產(chǎn)生報(bào)警。

主要參考資料:

嚴(yán)蔚敏 吳偉民 編著《數(shù)據(jù)結(jié)構(gòu)(c語言版)》 清華大學(xué)出版社 第44頁 3.1 棧、第52頁3.2.5表達(dá)式求值

完 成 期 限: 2012年6月21日

指導(dǎo)教師簽名:

課程負(fù)責(zé)人簽名:

2012年 6月 21 日

一、 設(shè)計(jì)題目

模擬計(jì)算器的程序

設(shè)計(jì)一個(gè)模擬計(jì)算器的程序,要求能對包含加、減、乘、除、括號運(yùn)算符及sqr和abs函數(shù)的任意整型表達(dá)式進(jìn)行求解。

設(shè)計(jì)要求:要檢查有關(guān)運(yùn)算的條件,并對錯(cuò)誤的條件產(chǎn)生報(bào)警。

二、 算法設(shè)計(jì)的思想

本程序設(shè)計(jì)主要是應(yīng)用了棧,利用棧的“先進(jìn)后出”原理,建立了兩個(gè)棧,分別為運(yùn)算符棧postack和運(yùn)算數(shù)棧pdstack。算法的基本思想(參考課本p53頁)是:

(1) 首先置操作數(shù)棧為pdstack空棧,表達(dá)式起始符為“=”,位運(yùn)算符棧的棧底元素;

(2) 依次讀入表達(dá)式中的每個(gè)字符,若是操作數(shù)則進(jìn)入pdstack棧,若是運(yùn)算符則和postack棧的棧定運(yùn)算符比較優(yōu)先權(quán)后作相應(yīng)操作,直到整個(gè)表達(dá)式求值完畢(即postack棧的棧定元素和當(dāng)前讀入的字符均為“=” )。

三、 算法的流程圖

本程序的流程如下附圖1所示:

附圖1 程序流程圖

四、 算法設(shè)計(jì)分析

首先創(chuàng)建了兩個(gè)棧:

typedef struct opstack //定義運(yùn)算符棧

{

char opstack[ma__operator_num];

int top;

}opstack, _popstack;

typedef struct datastack //定義運(yùn)算數(shù)棧

{

double stack[ma__data_num];

int top;

}datastack, _pdatastack;

來分別存放運(yùn)算符和運(yùn)算數(shù)。在兩個(gè)結(jié)構(gòu)體中均有一個(gè)top數(shù)據(jù)域,當(dāng)top=-1時(shí),表示該站為空棧。

定義一個(gè)evaluatee_pression_r函數(shù)來完成函數(shù)運(yùn)算的主要功能:讀入表達(dá)式,并計(jì)算結(jié)果。以下是對該函數(shù)的分析:

當(dāng)一次運(yùn)算開始時(shí),分別調(diào)用initpopstack(popstack &postack)函數(shù)和initpdatastack(pdatastack &pdstack)函數(shù)分別對運(yùn)算符棧和運(yùn)算數(shù)棧進(jìn)行初始化。調(diào)用pushopstack(postack, '=')函數(shù)來完成運(yùn)算符棧棧低元素的設(shè)置。

通過pushopstack(popstack &postack, char ch)函數(shù)、

popopstack(popstack &postack, char &ch)函數(shù)、

pushdatastack(pdatastack &pdstack, double d)函數(shù)和popdatastack(pdatastack &pdstack, double &d)函數(shù)來分別完成運(yùn)算符和運(yùn)輸數(shù)的進(jìn)出棧操作。gettoppopstack(popstack &postack)函數(shù)和gettoppdatastack(pdatastack &pdstack) 函數(shù)主要是進(jìn)行得到棧定元素的作用,特別是在對運(yùn)算符棧優(yōu)先級的比較中十分重要,其中還會(huì)調(diào)用isop(char &ch) 函數(shù)來區(qū)分讀入的是運(yùn)算符還是運(yùn)算數(shù)。

changechar(char &c)函數(shù)當(dāng)每次讀入一個(gè)字符是都會(huì)調(diào)用一次,主要的作用就是完成不用區(qū)分a、s的大小的功能。

precede(char op1, char op2)函數(shù)主要是通過一個(gè)二維字符串?dāng)?shù)組來存放9種運(yùn)算符的優(yōu)先級比較的結(jié)果,每當(dāng)讀到一個(gè)運(yùn)算符后就進(jìn)行與運(yùn)算符棧頂元素比較,通過返回的“<、>;、=”結(jié)果來進(jìn)行下一步的操作:'<'表示棧頂元素優(yōu)先級低,運(yùn)算符進(jìn)棧;'='表示脫括號并接受下一個(gè)字符;'>;'表示運(yùn)算符和運(yùn)算數(shù)各退棧一次并調(diào)用operate(double a, char theta, double b)函數(shù)(主要是對出棧的.運(yùn)算符和運(yùn)算數(shù)進(jìn)行計(jì)算),最后將運(yùn)算結(jié)果壓入運(yùn)算數(shù)棧pdstack。

當(dāng)操作結(jié)束時(shí)運(yùn)算數(shù)棧的棧頂元素就是計(jì)算結(jié)果,分別調(diào)用clearpopstack(postack)函數(shù)清空運(yùn)算符棧、clearpdatastack(pdstack)函數(shù)清空運(yùn)算數(shù)棧以待下一次繼續(xù)進(jìn)行相關(guān)操作。

print_user函數(shù)和e_it_e函數(shù)開始和結(jié)束時(shí)個(gè)調(diào)用一次,分別完成歡迎界面和退出界面的布置。main是本程序的主函數(shù),主要通過while語句和switch語句來完成本程序的運(yùn)行,當(dāng)輸入y(y)時(shí)調(diào)用evaluatee_pression_r函數(shù)完成計(jì)算,當(dāng)輸入n(n)時(shí),調(diào)用e_it_e函數(shù)退出本程序的運(yùn)行。

本程序還考慮到各種異常的處理,如運(yùn)算時(shí)除數(shù)為0、被開方數(shù)為0等情況的出現(xiàn),最終的處理是直接退出程序的運(yùn)行。

五、 運(yùn)行結(jié)果分析

1. 程序開始界面,如附圖2:

附圖2 開始界面

2.如下附圖3,附圖4分別是選擇進(jìn)入和退出程序界面:

附圖3(在以下界面輸入計(jì)算式即可運(yùn)行出計(jì)算結(jié)果如附圖5)

附圖4 退出界面

附圖5 運(yùn)行界面

2. 對異常的處理

a) 對異常1除數(shù)為0,如輸入“1+2/0=”程序?qū)⒅苯油顺?,如附圖6:

附圖6 異常1除數(shù)為0

b) 對異常2被開方數(shù)為負(fù)數(shù),如輸入“3+s(-9)=”程序?qū)⒅苯油顺?,如附圖7:

附圖7 異常2被開方數(shù)為負(fù)數(shù)

3.以下是對各種簡單運(yùn)算的運(yùn)行結(jié)果,如附圖8:

附圖8 簡單運(yùn)算

3. 綜合運(yùn)算:如式子“1/2+a(7-8)-s(9_8)=”運(yùn)行結(jié)果如附圖9

附圖9 綜合運(yùn)算

六、 收獲及體會(huì)

本程序以c語言的棧的相關(guān)知識為基礎(chǔ),通過控制兩個(gè)棧(運(yùn)算數(shù)棧和運(yùn)算符棧)的進(jìn)出的棧操作,來實(shí)現(xiàn)對包含加、減、乘、除、括號運(yùn)算符及sqrt和abs函數(shù)的任意整型表達(dá)式的求解運(yùn)算。

從程序的編寫來看,感覺這次自己真的學(xué)到了好多,特別是對程序的開發(fā)流程。從最初的選定程序,到最終的程序運(yùn)行成功,讓我感到如果是僅僅掌握課本上的知識是遠(yuǎn)遠(yuǎn)不能夠很好的應(yīng)用到實(shí)際的編程中去的。在這個(gè)過程中還需要我們更多的去考慮到實(shí)際條件的種種限制和約束。

我在寫本程序的過程中也遇到了很多的問題,當(dāng)然本程序的核心問題就是對兩個(gè)棧的壓出棧操作,需要做優(yōu)先級判斷,并要考慮什么時(shí)候進(jìn)棧,什么時(shí)候出棧等操作。我采用了課本上第52-54頁講的通過一個(gè)二維字符串?dāng)?shù)組來控制比較“+-_、as=”共9個(gè)運(yùn)算符的優(yōu)先級控制。對異常,如除數(shù)為0、被開方數(shù)小于0等異常也進(jìn)行了精心的處理。對操作過程中要用到的y、n、a、s等字符也進(jìn)行了改進(jìn),最終本程序可以不區(qū)分大小寫就完成相關(guān)操作。

總之,經(jīng)過本次專業(yè)課程設(shè)計(jì),讓我掌握了開發(fā)應(yīng)用軟件的基本流程,運(yùn)用所學(xué)編程技能的基本技巧,也讓我初步了解了軟件設(shè)計(jì)的基本方法,提高進(jìn)行工程設(shè)計(jì)的基本技能及分析、解決實(shí)際問題的能力,為以后畢業(yè)設(shè)計(jì)和工程實(shí)踐等打下良好的基礎(chǔ)。相信通過這次的課程設(shè)計(jì),我對所學(xué)的《數(shù)據(jù)結(jié)構(gòu)(c語言版)》和各種編程語言都有了一個(gè)全新的認(rèn)識。我也會(huì)積極吸取本次課程設(shè)計(jì)的經(jīng)驗(yàn),繼續(xù)研究數(shù)據(jù)結(jié)構(gòu)和所學(xué)的各種編程語言。

七、 源代碼

# include

# include

# include

# include

# define ma__operator_num 100 //運(yùn)算符棧數(shù)組長度

# define ma__data_num 100 //運(yùn)算數(shù)棧數(shù)組長度

typedef struct opstack //定義運(yùn)算符棧

{

char opstack[ma__operator_num];

int top;

}opstack, _popstack;

typedef struct datastack //定義運(yùn)算數(shù)棧

{

double stack[ma__data_num];

int top;

}datastack, _pdatastack;

void initpopstack(popstack &postack) //初始化運(yùn)算符棧

{

if( !(postack = (popstack)malloc(sizeof(opstack)))) //為運(yùn)算符棧分配空間

{

printf('分配內(nèi)存空間失敗! ');

e_it(-1);

}

postack->;top = -1;

}

void initpdatastack(pdatastack &pdstack) //初始化運(yùn)算數(shù)棧

{

if( !(pdstack = (pdatastack)malloc(sizeof(datastack)))) //為運(yùn)算數(shù)棧分配空間

{

printf('分配內(nèi)存空間失敗! ');

e_it(-1);

}

pdstack->;top = -1;

}

void pushopstack(popstack &postack, char ch) //運(yùn)算符進(jìn)棧

{

postack->;opstack[++(postack->;top)] = ch;

}

void popopstack(popstack &postack, char &ch) //運(yùn)算符出棧

{

ch = postack->;opstack[postack->;top];

postack->;top--;

}

void pushdatastack(pdatastack &pdstack, double d) //運(yùn)算數(shù)進(jìn)棧

{

++(pdstack->;top);

pdstack->;stack[pdstack->;top] = d;

}

void popdatastack(pdatastack &pdstack, double &d) //運(yùn)算數(shù)出棧

{

d = pdstack->;stack[pdstack->;top];

pdstack->;top--;

}

void clearpopstack(popstack &postack) //清空運(yùn)算符棧

{

postack->;top = -1;

}

void clearpdatastack(pdatastack &pdstack) //清空運(yùn)算數(shù)棧

{

pdstack->;top = -1;

}

char gettoppopstack(popstack &postack) //獲取運(yùn)算符棧頂元素

{

return postack->;opstack[postack->;top];

}

double gettoppdatastack(pdatastack &pdstack) //獲取運(yùn)算數(shù)棧頂元素

{

return pdstack->;stack[pdstack->;top];

}

bool isop(char &ch) //區(qū)分 運(yùn)算符 和 運(yùn)算數(shù) 的函數(shù),是運(yùn)算符時(shí)返回true,否則返回false

{ //判斷是否為符號

if ( (ch == '+') || (ch == '-') || (ch == '_') || (ch == '/') || (ch == '=') || (ch == 'a') || (ch == 's') || (ch == 'a') || (ch == 's') || (ch == '(') || (ch == ')') )

return true;

else

return false;

}

char precede(char op1, char op2) //參考《數(shù)據(jù)結(jié)構(gòu)》(c語言版)第53頁 3.2.5表達(dá)式求值 表 3.1

{

char tab[9][10]; //定義字符串的二維數(shù)組來存放運(yùn)算符優(yōu)先級的關(guān)系

strcpy( tab[0], '>;>;<<<>;<<>;' );

strcpy( tab, '>;>;<<<>;<<>;' );

strcpy( tab, '>;>;>;>;<>;<<>;' );

strcpy( tab[3], '>;>;>;>;<>;<<>;' );

strcpy( tab[4], '<<<<<=<

strcpy( tab[5], '>;>;>;>;e>;>;>;>;' );

strcpy( tab[6], '>;>;>;>;<>;>;>;>;' );

strcpy( tab[7], '>;>;>;>;<>;>;>;>;' );

strcpy( tab[8], '<<<<

printf(' | ___歡迎您的下次使用!謝謝!!!___ | '); //退出使用

printf(' |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| ');

}

double operate(double a, char theta, double b) //對出棧的運(yùn)算符和運(yùn)算數(shù)進(jìn)行計(jì)算

{

double s;

switch(theta)

{

case '+':

s = a + b;

break;

case '-':

s = a - b;

break;

case '_':

s = a _ b;

break;

case '/':

if ( b != 0 ) //判斷除數(shù)是否為0,若為0,退出程序

{

s = a/b;

break;

}

else

{

printf(' #### 除數(shù)為0,非法運(yùn)算。程序終止! #### ');

e_it_e; //打印結(jié)束菜單

e_it(-1);

}

case 'a':

s = fabs(b); //調(diào)用fabs函數(shù)

break;

case 's':

if( b >;= 0) //判斷被開方數(shù)是否為0,若為0,退出程序

{

s = sqrt(b); //調(diào)用sqrt函數(shù)

break;

}

else

{

printf(' #### 求負(fù)數(shù)的平方根是非法運(yùn)算。程序終止! #### ');

e_it_e; //打印結(jié)束菜單

e_it(-1);

}

}

return s;

}

char changechar(char &c) //通過changechar函數(shù)來把a(bǔ)、s的小寫字母改為大寫的

{

if( c == 'a' )

c = 'a';

else if( c == 's' )

c = 's';

return c;

}

//參考《數(shù)據(jù)結(jié)構(gòu)》(c語言版)第53頁 3.2.5表達(dá)式求值算法3.4 evaluatee_pression_r函數(shù)

void evaluatee_pression_r //計(jì)算函數(shù):讀入表達(dá)式,并計(jì)算結(jié)果

{

popstack postack; //聲明運(yùn)算符棧

pdatastack pdstack; //聲明運(yùn)算數(shù)棧

double result; //存運(yùn)算的結(jié)果

char _, theta, c; //c存放讀取的字符,_、theta存放運(yùn)算符棧的棧頂元素

int flag, data; //標(biāo)識符,用來讀入連續(xù)的數(shù)字

double s;

double getd; //存放gettopx__的結(jié)果

double a, b, cc; //a,b存放數(shù)據(jù)棧出棧的棧頂元素, c存放運(yùn)算結(jié)果

flag = 0; //初始化標(biāo)識符,用來判斷字符串中的連續(xù)數(shù)字

data = 0; //

initpopstack(postack); //初始化運(yùn)算符棧

initpdatastack(pdstack); //初始化運(yùn)算數(shù)棧

pushopstack(postack, '='); //在運(yùn)算符棧底放入'='

printf(' &請輸入表達(dá)式以'='結(jié)束:');

c = get); //讀入字符

changechar(c); //通過調(diào)用函數(shù)來實(shí)現(xiàn)把小寫的a、s改為大寫的a、s

while( c != '=' || gettoppopstack(postack) != '=')

{

if( !isop(c) ) //不是運(yùn)算符進(jìn)棧

{

s = c - '0'; //把字符轉(zhuǎn)化為數(shù)字

if ( flag == 1 )

{

popdatastack(pdstack, getd);

s = getd_10 + s;

}

pushdatastack(pdstack, s);

flag = 1;

c = get);

changechar(c);

}

else

{

flag = 0;

switch( precede(gettoppopstack(postack), c) ) //輸入元素和運(yùn)算符棧頂元素比較

{

case '<': //棧頂元素優(yōu)先級低

pushopstack(postack, c);

c = get);

changechar(c);

break;

case '=': //托括號并接受下一個(gè)字符

popopstack(postack, _);

c = get);

changechar(c);

break;

case '>;': //退棧并將運(yùn)算結(jié)果進(jìn)棧

popopstack(postack, theta);

popdatastack(pdstack, b);

popdatastack(pdstack, a);

cc = operate(a, theta, b);

pushdatastack(pdstack, cc);

break;

}//switch

}//else

}//while

result = gettoppdatastack(pdstack); //運(yùn)算結(jié)束時(shí),運(yùn)算數(shù)棧的棧底元素就是計(jì)算結(jié)果

clearpopstack(postack); //清空運(yùn)算符棧

clearpdatastack(pdstack); //清空運(yùn)算數(shù)棧

printf(' ->;計(jì)算結(jié)果為:%.2f ', result); //輸出運(yùn)算結(jié)果

return ;

}

void print_user //歡迎界面

{

printf(' 歡迎使用c語言版模擬計(jì)算器 ');

printf('________________________________________________________________________ ');

printf(' |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| ');

printf(' | 模擬計(jì)算器使用說明 | ');

printf(' | 作者:謝先斌 | ');

printf(' | 本程序包括對'+'、'-'、'_'、'/'、''的運(yùn)算 | ');

printf(' | 本程序中abs算用a替代、sqrt運(yùn)算用s代替 | ');

printf(' | 本程序中的一切字母均不區(qū)分大小寫 | ');

printf(' 正確的表達(dá)式如:1+a(7-8)+s(9_8)= ');

printf(' | 輸入'='表示表達(dá)式輸入結(jié)束!! | ');

printf(' | 歡迎使用!!!-->;-->; | ');

printf(' |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| ');

printf('________________________________________________________________________ ');

}

int main //主函數(shù)

{

char in;

bool b; //標(biāo)識符,用來標(biāo)識是否結(jié)束程序

b = true; //初始化,不結(jié)束

print_user; //打印歡迎界面

printf(' _請確認(rèn)使用計(jì)算器y/n:');

while(1)

{

scanf('%c', &in); //確認(rèn)是否繼續(xù)操作

get); //吃掉會(huì)車,避免干擾

switch(in)

{

case 'y':

case 'y':

{

evaluatee_pression_r; //進(jìn)入計(jì)算函數(shù):讀入表達(dá)式,并計(jì)算結(jié)果

break;

}

case 'n':

case 'n':

{

e_it_e;

b = false;

break;

}

//default:

// printf(' __輸入錯(cuò)誤,請重新輸入y/n:');

// break;

}

if(b==false) //如果 b==false ,退出整個(gè)程序

break;

printf(' _您確定要繼續(xù)使用計(jì)算機(jī)y/n:');

get); //用getchar吃掉回車,避免對后續(xù)輸入中in的干擾

}

return 0;

}

數(shù)據(jù)結(jié)構(gòu)總結(jié)(三篇)

1.2數(shù)據(jù)結(jié)構(gòu)的基本概念考點(diǎn)3數(shù)據(jù)結(jié)構(gòu)的定義考試鏈接:考點(diǎn)3在筆試考試中,是一個(gè)經(jīng)常考查的內(nèi)容,在筆試考試中出現(xiàn)的幾率為70%,主要是以選擇的形式出現(xiàn),分值為2分,此考點(diǎn)為識記…
推薦度:
點(diǎn)擊下載文檔文檔為doc格式

相關(guān)數(shù)據(jù)結(jié)構(gòu)信息

  • 數(shù)據(jù)結(jié)構(gòu)總結(jié)(三篇)
  • 數(shù)據(jù)結(jié)構(gòu)總結(jié)(三篇)58人關(guān)注

    1.2數(shù)據(jù)結(jié)構(gòu)的基本概念考點(diǎn)3數(shù)據(jù)結(jié)構(gòu)的定義考試鏈接:考點(diǎn)3在筆試考試中,是一個(gè)經(jīng)??疾榈膬?nèi)容,在筆試考試中出現(xiàn)的幾率為70%,主要是以選擇的形式出現(xiàn),分值為2分,此考點(diǎn) ...[更多]

總結(jié)范文熱門信息