




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ContactMe:jia:(
)為什么學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?計(jì)算機(jī)科學(xué)是一門研究數(shù)據(jù)表示和數(shù)據(jù)處理的科學(xué)用計(jì)算機(jī)來(lái)解決實(shí)際問(wèn)題,僅掌握幾種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言是難以應(yīng)付眾多復(fù)雜的課題的設(shè)計(jì)出一個(gè)結(jié)構(gòu)好效率高的程序,必須研究數(shù)據(jù)的特性及數(shù)據(jù)間的相互關(guān)系及其對(duì)應(yīng)的表示象方法與課堂學(xué)習(xí):等《數(shù)據(jù)結(jié)構(gòu)(用面C++描述)》
()課后實(shí)習(xí)每周實(shí)驗(yàn)課程大作業(yè)成績(jī)期末考試上機(jī)+課程大作業(yè)平時(shí)作業(yè)第一章 緒論§1.1
數(shù)據(jù)結(jié)構(gòu)早期:數(shù)值計(jì)算——運(yùn)算對(duì)象是簡(jiǎn)單的整型、實(shí)型或類型數(shù)據(jù)中后期:非數(shù)值計(jì)算——處理對(duì)象是類型復(fù)雜的數(shù)據(jù),數(shù)據(jù)元 間的相互關(guān)系一般無(wú)法用數(shù)學(xué)方程式加以描述學(xué)號(hào)姓名籍貫出生年月98131劉激揚(yáng)男北京1979.1298164衣男青島1979.0798165男天津1981.0298182女廣州1980.1098203海1980.0598224洪偉男太原1981.0198236熊南燕女蘇州1980.0398297宮力男北京1981.0198310女昆明1981.0298318陳健男杭州1979.1212345678910例1:“學(xué)生”表格例2:八皇后問(wèn)題(用四皇后描述)............四皇后問(wèn)題的狀態(tài)樹先修課程無(wú)C1,C4課程名稱計(jì)算機(jī)導(dǎo)論數(shù)據(jù)結(jié)構(gòu)匯編語(yǔ)言課程C1C2C3C4C5C4C6C7接 術(shù)數(shù)據(jù)庫(kù)原理C1C程序設(shè)計(jì)語(yǔ)言
C1計(jì)算機(jī)圖形學(xué)
C2,C3,C3C2,C9C8C9例3:教學(xué)計(jì)劃編排問(wèn)題編譯原理
C4(a)計(jì)操算作機(jī)系專統(tǒng)業(yè)的課程設(shè)C置2C1C2C3C6C4C5C9C7C8(b)表示課程之間優(yōu)先關(guān)系的有向圖例4:城市的煤氣管道問(wèn)題(a)結(jié)點(diǎn)間管道的代價(jià)(b)最經(jīng)濟(jì)的管道鋪設(shè)描述這類非數(shù)值計(jì)算問(wèn)題的數(shù)學(xué)模型不再是數(shù)學(xué)方程,而是諸如表、樹、圖之類的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是一門研究(非數(shù)值計(jì)算的)程序設(shè)計(jì)問(wèn)題中所出現(xiàn)的計(jì)算機(jī)操作對(duì)象以及它們之間的關(guān)系和操作的學(xué)科。一些基本概念:數(shù)據(jù)數(shù)據(jù)元素(數(shù)據(jù)成員)數(shù)據(jù)對(duì)象數(shù)據(jù):數(shù)據(jù)是信息的載體,是描述客觀事物的數(shù)、字符、以及所有能輸入到計(jì)算機(jī)中,被計(jì)算機(jī)程序識(shí)別和處理的符號(hào)(數(shù)值、字符等)的集合。數(shù)據(jù)元素(數(shù)據(jù)成員):是數(shù)據(jù)的基本單位。在不同的條件下,數(shù)據(jù)元素又可稱為元素、結(jié)點(diǎn)、頂點(diǎn)、記錄等。數(shù)據(jù)對(duì)象:具有相同性質(zhì)的數(shù)據(jù)元素(數(shù)據(jù)成員)的集合。-
整數(shù)數(shù)據(jù)對(duì)象N
={0,
1,
2,
…}-
學(xué)生數(shù)據(jù)對(duì)象數(shù)據(jù)結(jié)構(gòu)由某一數(shù)據(jù)對(duì)象及該對(duì)象中所有數(shù)據(jù)成員之間的關(guān)系組成。記為:Data_Structure
=
{D,
R}其中,D是某一數(shù)據(jù)對(duì)象,R是該對(duì)象中所有數(shù)據(jù)成員之間的關(guān)系的有限集合。數(shù)據(jù)結(jié)構(gòu)的形式定義數(shù)據(jù)結(jié)構(gòu)包括“邏輯結(jié)構(gòu)”和“物理結(jié)構(gòu)”兩個(gè)方面(層次):邏輯結(jié)構(gòu)是對(duì)數(shù)據(jù)成員之間的邏輯關(guān)系的描述,它可以用一個(gè)數(shù)據(jù)成員的集合和定義在此集合上的若干關(guān)系來(lái)表示;物理結(jié)構(gòu)是邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示
,故又稱“結(jié)構(gòu)”。根據(jù)問(wèn)題來(lái)建立邏輯結(jié)構(gòu)例如:Class=(D,S)數(shù)據(jù)集合:D={a,b1,…,bn,c1,…cn,d1,…dn}關(guān)系集合:S
=
{
R1,
R2
}R1
=
{
<a,
b1>,<a,
c1>,<a,
d1>}//班長(zhǎng)-組長(zhǎng)R2={<b1,bj>,<c1,cj>,<d1,dj>|
j =
2,
3,
…,
n
}//組長(zhǎng)-組員ab1c1…
cnb2
b3
…
bn
c2
c3
d2
d3
…
dnd1班級(jí)Class的邏輯結(jié)構(gòu)的圖示結(jié)構(gòu)是邏輯結(jié)構(gòu)在 器中的映象。數(shù)據(jù)元素的映象:任何的數(shù)據(jù)元素在計(jì)算機(jī)中最終都是轉(zhuǎn)化成一個(gè)二進(jìn)制的位串。關(guān)系的映象:…關(guān)系的映象方法:(關(guān)系對(duì)x,
y)1.順序映象:以相對(duì)的 位置表示后繼關(guān)系例如:令
y
的 位置和
x
的 位置之間差一個(gè)常量
C,而
C
是一個(gè)隱含值,整個(gè)結(jié)構(gòu)中只含數(shù)據(jù)元素本身的信息xy2.鏈?zhǔn)接诚?以附加信息(指針)表示后繼關(guān)系需要用一個(gè)和
x 在一起的附加信息(指針)指示y
的 位置yx§1.2
抽象數(shù)據(jù)類型及面象概念C語(yǔ)言中的數(shù)據(jù)類型char
int
float
double
void字符型整型浮點(diǎn)型雙精度型無(wú)值數(shù)據(jù)類型定義:一組性質(zhì)相同的值的集合,以及定義于這個(gè)值集合上的一組操作的總稱.不同類型的變量,其所能取的值的范圍不同,所能進(jìn)行的操作不同。例如:整型(int)值的范圍是:-32768~32767(16位)操作是:+,-,*,/,%抽象數(shù)據(jù)類型
(ADTs: Data
Types)由用戶定義,用以表示應(yīng)用問(wèn)題的數(shù)據(jù)模型由基本的數(shù)據(jù)類型組成,并包括一組相關(guān)的服務(wù)(或稱操作)支持了邏輯設(shè)計(jì)和物理實(shí)現(xiàn)的分離,支持封裝和信息隱蔽抽象:抽取反映問(wèn)題本質(zhì)的東西,忽略非本質(zhì)的細(xì)節(jié)抽象數(shù)據(jù)類型的兩種視圖:設(shè)計(jì)者的角度:根據(jù)問(wèn)題來(lái)定義抽象數(shù)據(jù)類型所包含的信息,給出其相關(guān)功能的實(shí)現(xiàn),并提供公共界面的接口。用戶的角度:使用公共界面的接口對(duì)抽象數(shù)據(jù)類型進(jìn)行操作,不需要考慮其物理實(shí)現(xiàn)。對(duì)于外部用戶來(lái)說(shuō),抽象數(shù)據(jù)類型應(yīng)該是一個(gè)黑盒子。自然數(shù)的抽象數(shù)據(jù)類型定義ADT
NaturalNumber
isobjects:一個(gè)整數(shù)的有序子集合,它開始于0,結(jié)束于機(jī)器能表示的最大整數(shù)(MaxInt)。Function:
對(duì)于所有的
x,y
NaturalNumber;False,True
Boolean,+、-、<、==、=等都是可用的服務(wù)。Zero():
返回自然數(shù)0NaturalNumberif(x==0)
返回Trueelse
返回Falseif(x+y<=MaxInt)返回x+yelse
返回MaxIntif(x<y)返回0else
返回x-yif(x==y)返回Trueelse
返回Falseif(x==MaxInt)返回xelse
返回x+1IsZero(x)
:BooleanAdd
(x,
y):NaturalNumberSubtract
(x,
y):NaturalNumberEqual
(x,
y):BooleanSuccessor
(x):NaturalNumberendNaturalNumber面 象的概念面 象
=
對(duì)象+類+繼承+通信面
象方法中類的定義充分體現(xiàn)了抽象數(shù)據(jù)類型的思想§1.3
數(shù)據(jù)結(jié)構(gòu)的抽象層次數(shù)據(jù)結(jié)構(gòu)的抽象層次線性結(jié)構(gòu):表、棧、隊(duì)列非線性結(jié)構(gòu)層次結(jié)構(gòu):樹,二叉樹,堆網(wǎng)狀結(jié)構(gòu):圖其它:集合線性結(jié)構(gòu)bindevetclibuser層次結(jié)構(gòu)樹二叉樹11
128
910987456231堆(特殊的樹結(jié)構(gòu))12711103
5
4
8
2“最大”堆96368
9“最小”堆7網(wǎng)狀結(jié)構(gòu)圖結(jié)構(gòu)12564312311216335
4網(wǎng)絡(luò)結(jié)構(gòu)C++的函數(shù)特征C++的數(shù)據(jù)C++的作用域C++的類C++的對(duì)象C++的輸入/輸出C++的函數(shù)C++的參數(shù)傳遞C++的函數(shù)名重載和操作符重載C++的動(dòng)態(tài)
分配(friend)函數(shù)內(nèi)聯(lián)(inline)函數(shù)結(jié)構(gòu)(struct)與類聯(lián)合(Union)與類§1.4
用C++描述面
象程序Niklaus
Wirth
(1976)數(shù)據(jù)結(jié)構(gòu)+算法=程序設(shè)計(jì)為計(jì)算機(jī)處理問(wèn)題編制一組指令集處理問(wèn)題的策略問(wèn)題的數(shù)學(xué)模型§1.5
算法定義算法:一個(gè)有窮的指令集,這些指令為解決某一特定任務(wù)規(guī)定了一個(gè)運(yùn)算序列。(算法是對(duì)特定問(wèn)題求解步驟的一種描述)輸入
有0個(gè)或多個(gè)輸入輸出
有一個(gè)或多個(gè)輸出(處理結(jié)果)確定性
每步定義都是確切、無(wú)歧義的有窮性
算法應(yīng)在執(zhí)行有窮步后結(jié)束有效性
每一條運(yùn)算應(yīng)足夠基本一個(gè)算法必須滿足以下五個(gè)重要特性:§1.6
模板模板:適合多種數(shù)據(jù)類型的類定義或算法,在特定環(huán)境下通過(guò)簡(jiǎn)單地代換,可以變成針對(duì)具體某種數(shù)據(jù)類型的類定義或算法。用模板定義用于排序的數(shù)據(jù)表(dataList)類#ifndef
DATALIST_H#define
DATALIST_H#include
<iostream.h>//模板標(biāo)識(shí)//類標(biāo)識(shí)template
<class
Type>class
dataList
{private:Type
*Element;int
ArraySize;void
Swap
(const
int
m1,
const
int
m2);
int
MaxKey
(constint
low,constint
high);public:dataList
(int
size
=
10)
:
ArraySize
(size),Element
(new
Type
[Size])
{
}~dataList
(
)
{delete
[
]
Element;}void
Sort
(
);friend
ostream&
operator
<<(ostream&outStream,
const
datalist<Type>&outList);friend
istream&
operator
>>
(istream&inStream,
const
datalist<Type>&inList);};#endifdataList類中所有操作作為模板函數(shù)的實(shí)現(xiàn)#ifndef
SELECTTM_H#define
SELECTTM_H#include
“datalist.h”template
<class
Type>void
dataList
<Type>::Swap
(const
int
m1, const
int
m2)
{//交換由m1,
m2為下標(biāo)的兩個(gè)數(shù)組元素的值Type
temp
=
Element
[m1];Element
[m1]
=
Element
[m2];Element
[m2]
=
temp;}template
<class
Type>int
dataList<Type>::MaxKey
(const
int
low,
const
int
high)
{//查找數(shù)組Element[low]~Element[high]中//的最大值,函數(shù)返回其位置int
max=low;for
(int
k
=
low+1,
k
<=
high,
k++)if
(
Element[max]
<
Element[k]
)max
=
k;return
max;}template
<class
Type>
ostream&operator<<
(ostream&
OutStream,const
dataList<Type>
OutList){//輸出對(duì)象為OutList,輸出流對(duì)象為OutStreamOutStream
<<
“Array
Contents
:
\n”;for
(int
i
=
0;
i
<
OutList.ArraySize;
i++)OutStream
<<
OutLis ement[i]
<<
‘
’;OutStream
<<
endl;OuStream
<<
“Array
Current
Size
:
”
<<OutList.ArraySize
<<
endl;return
OutStream;}template
<class
Type>istream&
operator
>>
(istream&
InStream,dataList<Type>
InList)
{//輸入對(duì)象為InList,輸入流對(duì)象為InStreamcout
<<
“Enter
array
Current
Size
:
”;Instream
>>
InList.ArraySize;cout
<<
“Enter
array
elements
:
\n”;for
(int
i
=
0;
i
<
InList.ArraySize;
i++)
{cout
<<
“Elememt”
<<
i
<<
“:”
;InStream
>>
InLis
ement[i];}return
InStream;}template
<class
Type>void
dataList<Type>::Sort
(
)
{//按非遞減順序?qū)rraySize個(gè)關(guān)鍵碼//Element[0]~Element[ArraySize-1]排序for(int
i=ArraySize
-1;i>0;i--){int
j
=
MaxKey
(0,
i);if
(
j
!=
i
)
swap
(j,
i);}}#endif使用模板的選擇排序算法的主函數(shù)#include
“selecttm.h”const
int
SIZE
=
10;int
main
(
)
{dataList
<int>
TestList
(SIZE);cin>>
TestList;cout
<<
“Testing
Selection
Sort
:
\n”
<<TestList
<<
endl;TestList.Sort
(
);cout
<<
“After
sorting
:
\n”
<<TestList
<<
endl;return
0;}§1.7
性能分析與度量算法的性能標(biāo)準(zhǔn):正確性可使用性可讀性效率健壯性算法的效率包括時(shí)間代價(jià)和空間代價(jià),前者指的是算法執(zhí)行時(shí)間;后者指的是算法執(zhí)行過(guò)程中所需的最大空間。兩者都與問(wèn)題的規(guī)模有關(guān)。算法效率的衡量方法:事后估計(jì)事前估計(jì)算法的事后估計(jì)在算法中的某些部位插裝時(shí)間函數(shù)time
()測(cè)定算法完成某
能所花費(fèi)的時(shí)間算法的事前估計(jì)空間復(fù)雜度時(shí)間復(fù)雜度時(shí)間復(fù)雜度編譯時(shí)間運(yùn)行時(shí)間–程序步:語(yǔ)法(義)上有意義的一段指令例如:注釋:程序步數(shù)為0語(yǔ)句:程序步數(shù)為0表達(dá)式、賦值語(yǔ)句:程序步數(shù)為1循環(huán)語(yǔ)句:循環(huán)控制語(yǔ)句每次執(zhí)行的程序步數(shù)為1程序步確定方法計(jì)數(shù)全局變量count例以迭代方式求累加和的函數(shù)行float
sum
(floata[],const
int
n
)1
{floats
=
0.0;for(int
i
=0;
i
<n;i++
)4
s
+=a[i];5
return
s;6
}在求累加和程序中加入count語(yǔ)句float
sum
(
float
a[
],
const
int
n
)
{float
s
=
0.0;count++;
//count統(tǒng)計(jì)執(zhí)行語(yǔ)句條數(shù)
for
(int
i=0;i<n;i++){count++;
//針對(duì)for語(yǔ)句s
+=
a[i];count++;//針對(duì)賦值語(yǔ)句}count++;count++;//針對(duì)for的最后一次//針對(duì)return語(yǔ)句return
s;}
執(zhí)行結(jié)束得程序步數(shù)
count=2
*
n
+3注意:一個(gè)語(yǔ)句本身的程序步數(shù)可能不等于該語(yǔ)句一次執(zhí)行所具有的程序步數(shù)。例如:賦值語(yǔ)句x
=
sum
(R,
n);本身的程序步數(shù)為1;一次執(zhí)行對(duì)函數(shù)sum
(R,n)的調(diào)用需要的程序步數(shù)為2*n+3;一次執(zhí)行的程序步數(shù)為1+2*n+3
=
2*n+4
確定程序的準(zhǔn)確程序步數(shù)十分
。程序步數(shù)本身也不是一個(gè)精確的概念,不能確切反映運(yùn)行時(shí)間。一個(gè)算法的“運(yùn)行時(shí)間"通常是隨問(wèn)題規(guī)模的增長(zhǎng)而增長(zhǎng),它是問(wèn)題規(guī)模(用正整數(shù)n表示)的函數(shù)。統(tǒng)計(jì)算法中作為基本運(yùn)算的原操作,以原操作重復(fù)執(zhí)行的次數(shù)作為算法的時(shí)間度量。算法中原操作重復(fù)執(zhí)行的次數(shù)是規(guī)模n的某個(gè)函數(shù)T(n)。時(shí)間復(fù)雜度的漸進(jìn)表示法要精確地計(jì)算T(n)通常較引入漸進(jìn)時(shí)間復(fù)雜度——在數(shù)量上估計(jì)一個(gè)算法的執(zhí)行時(shí)間,也能夠達(dá)到分析算法的目的。(觀察算法隨n增長(zhǎng)的趨勢(shì))(大Ο記號(hào)):T(n)=O(f(n))(稱T(n)為算法的(漸近)時(shí)間復(fù)雜度。表明,隨著問(wèn)題規(guī)模n的增長(zhǎng),算法執(zhí)行時(shí)間的增長(zhǎng)率和f(n)的增長(zhǎng)率相同)例:一個(gè)程序的實(shí)際執(zhí)行時(shí)間為T(n)=2.7n3+3.8n2+5.3
則T(n)=Ο(n3)大O表示法:T(n)=O(f(n))的幾條規(guī)則加
則
針對(duì)并列程序段T(n,
m) =
T1
(n)
+
T2
(m)=
O(max
(f
(n),
g
(m)))乘
則
針對(duì)嵌套程序段T
(n,
m)
=
T1
(n)
*
T2
(m)=
O(f
(n)*g
(m))乘 則中的常數(shù)無(wú)關(guān)項(xiàng)
O(C)
→
O(1)T
(n)
=
O(
c
*
f(n))
=O(f(n))Ο(1)表示常數(shù)計(jì)算時(shí)間例1:兩個(gè)并列循環(huán)void
example
(float
x[
][
],
int
m,
int
n,
int
k)
{float
sum
[
];for
(int
i=0;i<m;i++){ //x[][]中各行sum[i]=0.0;
//數(shù)據(jù)累加for
(
int
j=0;
j<n;
j++
)
sum[i]
+=
x[i][j];}for
(i=0;i<m;i++)
//打印各行數(shù)據(jù)和
cout
<<“Line
”<<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CACEM 15.2-01-2020城市公共交通運(yùn)營(yíng)服務(wù)第1部分:基本要求
- 運(yùn)動(dòng)頭盔內(nèi)部結(jié)構(gòu)對(duì)安全性能的影響考核試卷
- 如何選擇適合的嵌入式開發(fā)平臺(tái)試題及答案
- 公路建設(shè)項(xiàng)目的生命周期管理試題及答案
- 藥用純化水設(shè)備與系統(tǒng)設(shè)計(jì)考核試卷
- 行政組織理論變革的動(dòng)態(tài)分析及2025年試題及答案
- 航空員工培訓(xùn)與發(fā)展考核試卷
- 油砂資源綜合利用考核試卷
- 應(yīng)對(duì)突發(fā)情況的公路工程試題及答案
- 數(shù)據(jù)庫(kù)技術(shù)文檔的重要性試題及答案
- 2023年《畜牧獸醫(yī)綜合知識(shí)復(fù)習(xí)題及答案》
- 八年級(jí)語(yǔ)文下冊(cè)(部編版) 第四單元 經(jīng)典演講-單元主題閱讀訓(xùn)練(含解析)
- 2024新高考英語(yǔ)1卷試題及答案(含聽力原文)
- 2023-2024學(xué)年譯林版四年級(jí)英語(yǔ)下冊(cè)Unit8《How are you?》單元檢測(cè)卷(含聽力及答案)
- DL/T 5352-2018 高壓配電裝置設(shè)計(jì)規(guī)范
- 養(yǎng)老院食物中毒應(yīng)急預(yù)案
- 國(guó)家開放大學(xué)《消費(fèi)者行為學(xué)》形考任務(wù)實(shí)訓(xùn)(六選一)參考答案
- AQ∕T 7009-2013 機(jī)械制造企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化規(guī)范
- JTG-C30-2002公路工程水文勘測(cè)設(shè)計(jì)規(guī)范-PDF解密
- 2024年廣東廣州越秀區(qū)小升初考試語(yǔ)文試卷含答案
- 慢性病照護(hù)智慧樹知到期末考試答案2024年
評(píng)論
0/150
提交評(píng)論