新聞中心
#include
#define?TRUE 1
#define?FALSE 0
#define?OK 1
#define?ERROR 0
#define?MAXSIZE 20
#define?LT(a,b)((a)<(b))
#define?EQ(a,b)((a)==(b))
typedef?int?Status;
typedef?int?KeyType;
typedef?int?InfoType;
typedef?struct{
KeyType key;
InfoType otherinfo;
}RedType;
typedef?struct{
RedType r[MAXSIZE+1];
int?length;
}SqList;
Status InitList(SqList &L){
L.length=0;
return?OK;
}
Status CreateList(SqList &L,int?n){
int?i;
printf("輸入%d個(gè)元素:\n",n);
for(i=1;i<=n;i++){
scanf("%d",&L.r[i].key);
++L.length;
}
if(L.length==0) return?ERROR;
return?OK;
}
Status DispList(SqList &L){
int?i;
if(L.length==0) ?return?ERROR;
for(i=1;i<=L.length;i++){
printf("%d",L.r[i].key);
}
printf("\n");
return?OK;
}
void?InsertSort(SqList &L){
int?i;
int?j;
for(i=2;i<=L.length;++i){
if(LT(L.r[i].key,L.r[i-1].key)){
L.r[0]=L.r[i];
L.r[i]=L.r[i-1];
for(j=i-2;LT(L.r[0].key,L.r[j].key);--j)
L.r[j+1]=L.r[j];
L.r[j+1]=L.r[0];
}
}
}
int?main(){
SqList L;
int?n;
printf("初始化順序表,");
InitList(L);
if(L.length==0)
printf("順序表為空!\n");
printf("輸入順序表的元素個(gè)數(shù):");
scanf("%d",&n);
CreateList(L,n);
printf("輸出元素的順序表如下:\n");
DispList(L);
InsertSort(L);
printf("直接插入排序結(jié)果如下:\n");
DispList(L);
return?0;
}
數(shù)據(jù)結(jié)構(gòu)(data structure)是帶有結(jié)構(gòu)特性的數(shù)據(jù)元素的集合,它研究的是數(shù)據(jù)的邏輯結(jié)構(gòu)和數(shù)據(jù)的物理結(jié)構(gòu)以及它們之間的相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相適應(yīng)的運(yùn)算,設(shè)計(jì)出相應(yīng)的算法,并確保經(jīng)過這些運(yùn)算以后所得到的新結(jié)構(gòu)仍保持原來的結(jié)構(gòu)類型。簡(jiǎn)而言之,數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合,即帶“結(jié)構(gòu)”的數(shù)據(jù)元素的集合。“結(jié)構(gòu)”就是指數(shù)據(jù)元素之間存在的關(guān)系,分為邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)。?[2]?
數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的兩個(gè)密切相關(guān)的方面,同一邏輯結(jié)構(gòu)可以對(duì)應(yīng)不同的存儲(chǔ)結(jié)構(gòu)。算法的設(shè)計(jì)取決于數(shù)據(jù)的邏輯結(jié)構(gòu),而算法的實(shí)現(xiàn)依賴于指定的存儲(chǔ)結(jié)構(gòu)。?[2]?
數(shù)據(jù)結(jié)構(gòu)的研究?jī)?nèi)容是構(gòu)造復(fù)雜軟件系統(tǒng)的基礎(chǔ),它的核心技術(shù)是分解與抽象。通過分解可以劃分出數(shù)據(jù)的3個(gè)層次;再通過抽象,舍棄數(shù)據(jù)元素的具體內(nèi)容,就得到邏輯結(jié)構(gòu)。類似地,通過分解將處理要求劃分成各種功能,再通過抽象舍棄實(shí)現(xiàn)細(xì)節(jié),就得到運(yùn)算的定義。上述兩個(gè)方面的結(jié)合可以將問題變換為數(shù)據(jù)結(jié)構(gòu)。這是一個(gè)從具體(即具體問題)到抽象(即數(shù)據(jù)結(jié)構(gòu))的過程。然后,通過增加對(duì)實(shí)現(xiàn)細(xì)節(jié)的考慮進(jìn)一步得到存儲(chǔ)結(jié)構(gòu)和實(shí)現(xiàn)運(yùn)算,從而完成設(shè)計(jì)任務(wù)。這是一個(gè)從抽象(即數(shù)據(jù)結(jié)構(gòu))到具體(即具體實(shí)現(xiàn))的過程。?[3]?
研究對(duì)象編輯?播報(bào)
數(shù)據(jù)邏輯結(jié)構(gòu)指反映數(shù)據(jù)元素之間的邏輯關(guān)系的數(shù)據(jù)結(jié)構(gòu),其中的邏輯關(guān)系是指數(shù)據(jù)元素之間的前后間關(guān)系,而與他們?cè)谟?jì)算機(jī)中的存儲(chǔ)位置無關(guān)。邏輯結(jié)構(gòu)包括:?[1]?
1.集合:數(shù)據(jù)結(jié)構(gòu)中的元素之間除了“同屬一個(gè)集合” 的相互關(guān)系外,別無其他關(guān)系;?[1]?
2.線性結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對(duì)一的相互關(guān)系;?[1]?
3.樹形結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在一對(duì)多的相互關(guān)系;?[1]?
4.圖形結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)中的元素存在多對(duì)多的相互關(guān)系。?[1]?
數(shù)據(jù)物理結(jié)構(gòu)數(shù)據(jù)的物理結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的表示(又稱映像),它包括數(shù)據(jù)元素的機(jī)內(nèi)表示和關(guān)系的機(jī)內(nèi)表示。由于具體實(shí)現(xiàn)的方法有順序、鏈接、索引、散列等多種,所以,一種數(shù)據(jù)結(jié)構(gòu)可表示成一種或多種存儲(chǔ)結(jié)構(gòu)。?[1]?
數(shù)據(jù)元素的機(jī)內(nèi)表示(映像方法): 用二進(jìn)制位(bit)的位串表示數(shù)據(jù)元素。通常稱這種位串為節(jié)點(diǎn)(node)。當(dāng)數(shù)據(jù)元素有若干個(gè)數(shù)據(jù)項(xiàng)組成時(shí),位串中與各個(gè)數(shù)據(jù)項(xiàng)對(duì)應(yīng)的子位串稱為數(shù)據(jù)域(data field)。因此,節(jié)點(diǎn)是數(shù)據(jù)元素的機(jī)內(nèi)表示(或機(jī)內(nèi)映像)。?[1]?
關(guān)系的機(jī)內(nèi)表示(映像方法):數(shù)據(jù)元素之間的關(guān)系的機(jī)內(nèi)表示可以分為順序映像和非順序映像,常用兩種存儲(chǔ)結(jié)構(gòu):順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。順序映像借助元素在存儲(chǔ)器中的相對(duì)位置來表示數(shù)據(jù)元素之間的邏輯關(guān)系。非順序映像借助指示元素存儲(chǔ)位置的指針(pointer)來表示數(shù)據(jù)元素之間的邏輯關(guān)系。?[1]?
數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式稱為數(shù)據(jù)的物理結(jié)構(gòu)(也稱為存儲(chǔ)結(jié)構(gòu))。一般來說,一種數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)根據(jù)需要可以表示成多種存儲(chǔ)結(jié)構(gòu),常用的存儲(chǔ)結(jié)構(gòu)有順序存儲(chǔ)、鏈?zhǔn)酱鎯?chǔ)、索引存儲(chǔ)和哈希存儲(chǔ)等。?[4]?
數(shù)據(jù)的順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn)是:借助元素在存儲(chǔ)器中的相對(duì)位置來表示數(shù)據(jù)元素之間的邏輯關(guān)系;非順序存儲(chǔ)的特點(diǎn)是:借助指示元素存儲(chǔ)地址的指針表示數(shù)據(jù)元素之間的邏輯關(guān)系。?[4]?
分類編輯?播報(bào)
數(shù)據(jù)結(jié)構(gòu)有很多種,一般來說,按照數(shù)據(jù)的邏輯結(jié)構(gòu)對(duì)其進(jìn)行簡(jiǎn)單的分類,包括線性結(jié)構(gòu)和非線性結(jié)構(gòu)兩類。?[5]?
線性結(jié)構(gòu)簡(jiǎn)單地說,線性結(jié)構(gòu)就是表中各個(gè)結(jié)點(diǎn)具有線性關(guān)系。如果從數(shù)據(jù)結(jié)構(gòu)的語(yǔ)言來描述,線性結(jié)構(gòu)應(yīng)該包括如下幾點(diǎn):?[5]?
1、線性結(jié)構(gòu)是非空集。?[5]?
2、線性結(jié)構(gòu)有且僅有一個(gè)開始結(jié)點(diǎn)和一個(gè)終端結(jié)點(diǎn)。?[5]?
3、線性結(jié)構(gòu)所有結(jié)點(diǎn)都最多只有一個(gè)直接前驅(qū)結(jié)點(diǎn)和一個(gè)直接后繼結(jié)點(diǎn)。?[5]?
線性表就是典型的線性結(jié)構(gòu),還有棧、隊(duì)列和串等都屬于線性結(jié)構(gòu)。?[5]?
非線性結(jié)構(gòu)簡(jiǎn)單地說,非線性結(jié)構(gòu)就是表中各個(gè)結(jié)點(diǎn)之間具有多個(gè)對(duì)應(yīng)關(guān)系。如果從數(shù)據(jù)結(jié)構(gòu)的語(yǔ)言來描述,非線性結(jié)構(gòu)應(yīng)該包括如下幾點(diǎn):?[5]?
1、非線性結(jié)構(gòu)是非空集。?[5]?
2、非線性結(jié)構(gòu)的一個(gè)結(jié)點(diǎn)可能有多個(gè)直接前驅(qū)結(jié)點(diǎn)和多個(gè)直接后繼結(jié)點(diǎn)。?[5]?
在實(shí)際應(yīng)用中,數(shù)組、廣義表、樹結(jié)構(gòu)和圖結(jié)構(gòu)等數(shù)據(jù)結(jié)構(gòu)都屬于非線性結(jié)構(gòu)。?[5]
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:關(guān)于數(shù)據(jù)結(jié)構(gòu)-創(chuàng)新互聯(lián)
標(biāo)題來源:http://www.ef60e0e.cn/article/cddedp.html