數據結構計算的演算法
Ⅰ 數據結構經典演算法有哪些
二叉樹遍歷:
status initqueue(Queue &Q)
{//初始化一個空隊列
Q.base=(QElemtype *)malloc(MAXSIZE*sizeof(QElemtype));
if(!Q.base)
exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
status inqueue(Queue &Q,BiTree e)
{//將元素e入隊
if((Q.rear+1)%MAXSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return OK;
}
status outqueue(Queue &Q,BiTree &e)
{//刪除隊頭元素,並用e返回其值
if(Q.front==Q.rear)
return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return OK;
}
status emptyqueue(Queue Q)
{//若隊列空,返回TRUE,否則返回FALSE
if(Q.front==Q.rear)
return TRUE;
return FALSE;
}
//以下是二叉樹的演算法
void creattree(BiTree &t)
{//先序順序建立二叉樹t
char ch;
ch=getchar();
if(ch==' ')
{
t=NULL;
return;
}
t=(BiTree)malloc(sizeof(BiNode));
if(!t) exit(OVERFLOW);
t->data=ch;
creattree(t->lchild);
creattree(t->rchild);
}
void print(TElemtype e)
{
printf("%c",e);
}
void pretraverse(BiTree t, void (*visit)(TElemtype e))
{//先序遍歷二叉樹t
if(t)
{
(*visit)(t->data);
pretraverse(t->lchild,visit);
pretraverse(t->rchild,visit);
}
}
void intraverse(BiTree t, void (*visit)(TElemtype e))
{//中序遍歷二叉樹t
if(t)
{
intraverse(t->lchild,visit);
(*visit)(t->data);
intraverse(t->rchild,visit);
}
}
void posttraverse(BiTree t, void (*visit)(TElemtype e))
{//後序遍歷二叉樹t
if(t)
{
posttraverse(t->lchild,visit);
posttraverse(t->rchild,visit);
(*visit)(t->data);
}
}
void leveltraverse(BiTree t, void (*visit)(TElemtype e))
{//層次遍歷二叉樹t
BiNode *p;
Queue Q;
//if(!t) return;
initqueue(Q);
p=t;
inqueue(Q,p);
while(!emptyqueue(Q))
{
outqueue(Q,p);
if(p)
{
(*visit)(p->data);
inqueue(Q,p->lchild);
inqueue(Q,p->rchild);
}
}
}
void destroytree(BiTree &t)
{
if(t==NULL) return;
else if(t->lchild==NULL&&t->rchild==NULL)
{
free(t);
return;
}
else{
destroytree(t->lchild);
destroytree(t->rchild);
free(t);
return;
}
}
Ⅱ 數據結構中有哪些基本演算法
數據結構中最基本的演算法有:查找、排序、快速排序,堆排序,歸並排序,,二分搜索演算法
等等。
1、用的最多也是最簡單的數據結構是線性表。
2、有前途的又難數據結構是圖 。
3、常用的80%演算法是排序和查找。
Ⅲ 數據結構中常用的演算法有哪些啊
基本:
線性表,鏈表,棧,隊列
排序:
快速排序,堆排序,歸並排序,希爾排序,插入排序,選擇排序
二叉樹:
前序,中序,後序遍歷,層次遍歷,包括遞歸演算法和非遞歸演算法兩種
AVL樹,Huffman編碼
二叉樹和樹,森林之間的轉換,穿線樹
圖演算法:
深度優先遍歷演算法,廣度優先遍歷演算法,最小生成樹,最短路徑
字元串:
查找子串,KMP演算法
以上都是比較基本的演算法,一定要弄懂
Ⅳ 數據結構有哪些基本演算法
一、排序演算法 1、有簡單排序(包括冒泡排序、插入排序、選擇排序) 2、快速排序,很常見的 3、堆排序, 4、歸並排序,最穩定的,即沒有太差的情況 二、搜索演算法 最基礎的有二分搜索演算法,最常見的搜索演算法,前提是序列已經有序 還有深度優先和廣度有限搜索;及使用剪枝,A*,hash表等方法對其進行優化。 三、當然,對於基本數據結構,棧,隊列,樹。都有一些基本的操作 例如,棧的pop,push,隊列的取隊頭,如隊;以及這些數據結構的具體實現,使用連續的存儲空間(數組),還是使用鏈表,兩種具體存儲方法下操作方式的具體實現也不一樣。 還有樹的操作,如先序遍歷,中序遍歷,後續遍歷。 當然,這些只是一些基本的針對數據結構的演算法。 而基本演算法的思想應該有:1、回溯2、遞歸3、貪心4、動態規劃5、分治有些數據結構教材沒有涉及基礎演算法,lz可以另外找一些基礎演算法書看一下。有興趣的可以上oj做題,呵呵。演算法真的要學起來那是挺費勁。
Ⅳ 數據結構演算法有哪些
數據結構是一門研究非數值計算的程序設計問題中的操作對象,以及它們之間的關系和操作等相關問題的學科。
可以理解為:程序設計 = 數據結構 + 演算法
數據結構演算法具有五個基本特徵:輸入、輸出、有窮性、確定性和可行性。
1、輸入:一個演算法具有零個或者多個輸出。以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件。後面一句話翻譯過來就是,如果一個演算法本身給出了初始條件,那麼可以沒有輸出。比如,列印一句話:NSLog(@"你最牛逼!");
2、輸出:演算法至少有一個輸出。也就是說,演算法一定要有輸出。輸出的形式可以是列印,也可以使返回一個值或者多個值等。也可以是顯示某些提示。
3、有窮性:演算法的執行步驟是有限的,演算法的執行時間也是有限的。
4、確定性:演算法的每個步驟都有確定的含義,不會出現二義性。
5、可行性:演算法是可用的,也就是能夠解決當前問題。
數據結果的基本演算法有:
1、圖搜索(廣度優先、深度優先)深度優先特別重要
2、排序
3、動態規劃
4、匹配演算法和網路流演算法
5、正則表達式和字元串匹配
6、三路劃分-快速排序
7、合並排序(更具擴展性,復雜度類似快速排序)
8、DF/BF 搜索 (要知道使用場景)
9、Prim / Kruskal (最小生成樹)
10、Dijkstra (最短路徑演算法)
11、選擇演算法
Ⅵ 數據結構有哪些演算法……
演算法只是用編程語言來實現的一定程序步驟,
具體來講就是控制cpu的執行流程。
另外演算法從大類上來分,或者說是其他演算法的基礎,主要就是排序和查找。其中排序演算法中有分成很多種,比如,插入排序,冒泡排序,快速排序和堆排序等。而查找又有很多種,比如順序查找,二分查找等。
數據結構只是數據的結構,用不同的語言來實現同一個演算法可能在寫法上會有點不同,但是核心步驟肯定是一樣的。
java好久沒碰了,具體怎麼寫忘了。其實就是把演算法封裝到類的方法中去,也就是常說的面向對象裡面的封裝性。
Ⅶ 數據結構必須掌握的演算法有哪些
主要是樹的遍歷,查找,替換和刪除。圖的遍歷。(bfs,dfs)查找裡面的二叉樹查找
,平均數查找,harsh查找八大排序注意圖和樹的演算法因存儲結構不同而不同。其他的如表了什麼的,應該不是很難。是必須會的
Ⅷ 數據結構的結構演算法
演算法的設計取決於數據(邏輯)結構,而演算法的實現依賴於採用的存儲結構。數據的存儲結構實質上是它的邏輯結構在計算機存儲器中的實現,為了全面的反映一個數據的邏輯結構,它在存儲器中的映象包括兩方面內容,即數據元素之間的信息和數據元素之間的關系。不同數據結構有其相應的若干運算。數據的運算是在數據的邏輯結構上定義的操作演算法,如檢索、插入、刪除、更新和排序等。
數據的運算是數據結構的一個重要方面,討論任一種數據結構時都離不開對該結構上的數據運算及其實現演算法的討論。
數據結構不同於數據類型,也不同於數據對象,它不僅要描述數據類型的數據對象,而且要描述數據對象各元素之間的相互關系。
數據類型是一個值的集合和定義在這個值集上的一組操作的總稱。數據類型可分為兩類:原子類型、結構類型。一方面,在程序設計語言中,每一個數據都屬於某種數據類型。類型明顯或隱含地規定了數據的取值范圍、存儲方式以及允許進行的運算。可以認為,數據類型是在程序設計中已經實現了的數據結構。另一方面,在程序設計過程中,當需要引入某種新的數據結構時,總是藉助編程語言所提供的數據類型來描述數據的存儲結構。
計算機中表示數據的最小單位是二進制數的一位,叫做位。我們用一個由若干位組合起來形成的一個位串表示一個數據元素,通常稱這個位串為元素或結點。當數據元素由若干數據項組成時,位串中對應於各個數據項的子位串稱為數據域。元素或結點可看成是數據元素在計算機中的映象。
一個軟體系統框架應建立在數據之上,而不是建立在操作之上。一個含抽象數據類型的軟體模塊應包含定義、表示、實現三個部分。
對每一個數據結構而言,必定存在與它密切相關的一組操作。若操作的種類和數目不同,即使邏輯結構相同,數據結構能起的作用也不同。
不同的數據結構其操作集不同,但下列操作必不可缺:
1,結構的生成;
2.結構的銷毀;
3,在結構中查找滿足規定條件的數據元素;
4,在結構中插入新的數據元素;
5,刪除結構中已經存在的數據元素;
6,遍歷。
抽象數據類型:一個數學模型以及定義在該模型上的一組操作。抽象數據類型實際上就是對該數據結構的定義。因為它定義了一個數據的邏輯結構以及在此結構上的一組演算法。抽象數據類型可用以下三元組表示:(D,S,P)。D是數據對象,S是D上的關系集,P是對D的基本操作集。ADT的定義為:
ADT 抽象數據類型名:{數據對象:(數據元素集合),數據關系:(數據關系二元組結合),基本操作:(操作函數的羅列)}; ADT抽象數據類型名;抽象數據類型有兩個重要特性:
數據抽象
用ADT描述程序處理的實體時,強調的是其本質的特徵、其所能完成的功能以及它和外部用戶的介面(即外界使用它的方法)。
數據封裝
將實體的外部特性和其內部實現細節分離,並且對外部用戶隱藏其內部實現細節。
數據(Data)是信息的載體,它能夠被計算機識別、存儲和加工處理。它是計算機程序加工的原料,應用程序處理各種各樣的數據。計算機科學中,所謂數據就是計算機加工處理的對象,它可以是數值數據,也可以是非數值數據。數值數據是一些整數、實數或復數,主要用於工程計算、科學計算和商務處理等;非數值數據包括字元、文字、圖形、圖像、語音等。數據元素(Data Element)是數據的基本單位。在不同的條件下,數據元素又可稱為元素、結點、頂點、記錄等。例如,學生信息檢索系統中學生信息表中的一個記錄等,都被稱為一個數據元素。
有時,一個數據元素可由若干個數據項(Data Item)組成,例如,學籍管理系統中學生信息表的每一個數據元素就是一個學生記錄。它包括學生的學號、姓名、性別、籍貫、出生年月、成績等數據項。這些數據項可以分為兩種:一種叫做初等項,如學生的性別、籍貫等,這些數據項是在數據處理時不能再分割的最小單位;另一種叫做組合項,如學生的成績,它可以再劃分為數學、物理、化學等更小的項。通常,在解決實際應用問題時是把每個學生記錄當作一個基本單位進行訪問和處理的。
數據對象(Data Object)或數據元素類(Data Element Class)是具有相同性質的數據元素的集合。在某個具體問題中,數據元素都具有相同的性質(元素值不一定相等),屬於同一數據對象(數據元素類),數據元素是數據元素類的一個實例。例如,在交通咨詢系統的交通網中,所有的頂點是一個數據元素類,頂點A和頂點B各自代表一個城市,是該數據元素類中的兩個實例,其數據元素的值分別為A和B。 數據結構(Data Structure)是指互相之間存在著一種或多種關系的數據元素的集合。在任何問題中,數據元素之間都不會是孤立的,在它們之間都存在著這樣或那樣的關系,這種數據元素之間的關系稱為結構。
Ⅸ 數據結構 的演算法
FIFO 10次缺頁,分別是第1,2,3,4,8(1),10(2),11(3),12(4),13(6),14(1)頁
LRU 8次缺頁,分別是第1,2,3,4,8(3),12(4),13(6),14(1)頁
--------------------------------------
註:括弧內是缺頁時進程淘汰的頁號。因開始時進程中頁面為空,故前四次不淘汰頁面。