Ⅰ 數據結構與演算法分析:C語言描述的目錄
第1章 引論1.1 本書討論的內容1.2 數學知識復習1.2.1 指數1.2.2 對數1.2.3 級數1.2.4 模運算1. 2.5 證明方法1.3 遞歸簡論總結練習參考文獻第2章 演算法分析2.1 數學基礎2.2 模型2.3 要分析的問題2.4 運行時間計算2.4.1 一個簡單的例子2.4.2 一般法則2.4.3 最大子序列和問題的解.2.4.4 運行時間中的對數2.4.5 檢驗你的分析2.4.6 分析結果的准確性總結練習參考文獻第3章 表、棧和隊列3.1 抽象數據類型(adt)3.2 表adt3.2.1 表的簡單數組實現3.2.2 鏈表3.2.3 程序設計細節3.2.4 常見的錯誤3.2.5 雙鏈表3.2.6 循環鏈表3.2.7 例子3.2.8 鏈表的游標實現3.3 棧adt3.3.1 棧模型3.3.2 棧的實現3.3.3 應用3.4 隊列adt3.4.1 隊列模型3.4.2 隊列的數組實現3.4.3 隊列的應用總結練習第4章 樹4.1 預備知識4.1.1 樹的實現4.1.2 樹的遍歷及應用4.2 二叉樹4.2.1 實現4.2.2 表達式樹4.3 查找樹adt--二叉查找樹4.3.1 makeempty4.3.2 find4.3.3 findmin和findmax4.3.4 insert4.3.5 delere4.3.6 平均情形分析4.4 avl樹4.4.1 單旋轉4.4.2 雙旋轉4.5 伸展樹4.5.1 一個簡單的想法4.5.2 展開4.6 樹的遍歷4.7 b-樹總結練習參考文獻第5章 散列5.1 一般想法5.2 散列函數5.3 分離鏈接法5.4 開放定址法5.4.1 線性探測法5.4.2 平方探測法5.4.3 雙散列5.5 再散列5.6 可擴散列總結練習參考文獻第6章 優先隊列(堆)6.1 模型6.2 一些簡單的實現6.3 二叉堆6.3.1 結構性質6.3.2 堆序性質6.3.3 基本的堆操作6.3.4 其他的堆操作6.4 優先隊列的應用6.4.1 選擇問題6.4.2 事件模擬6.5 d-堆6.6 左式堆6.6.1 左式堆的性質6.6.2 左式堆的操作6.7 斜堆6.8 二項隊列6.8.1 二項隊列結構6.8.2 二項隊列操作6.8.3 二項隊列的實現總結練習參考文獻第7章 排序7.1 預備知識7.2 插入排序7.2.1 演算法7.2.2 插入排序的分析7.3 一些簡單排序演算法的下界7. 4 希爾排序7.4.1 希爾排序的最壞情形分析7.5 堆排序7.5.1 堆排序的分析7.6 歸並排序7.6.1 歸並排序的分析7.7 快速排序7.7.1 選取樞紐元7.7.2 分割策略7.7.3 小數組7.7.4 實際的快速排序常式7.7.5 快速排序的分析7.7.6 選擇的線性期望時間演算法7.8 大型結構的排序7.9 排序的一般下界7.9.1 決策樹7.10 桶式排序7.11 外部排序7.11.1 為什麼需要新的演算法7.11.2 外部排序模型7.11.3 簡單演算法7.11.4 多路合並7.11.5 多相合並7.11.6 替換選擇總結練習參考文獻第8章 不相交集adt8.1 等價關系8.2 動態等價性問題8.3 基本數據結構8.4 靈巧求並演算法8.5 路徑壓縮8.6 按秩求並和路徑壓縮的最壞情形8.6.1 union/find演算法分析8.7 一個應用總結練習參考文獻第9章 圖論演算法9.1 若干定義9.1.1 圖的表示9.2 拓撲排序9.3 最短路徑演算法9.3.1 無權最短路徑9.3.2 dijkstra演算法9.3.3 具有負邊值的圖9.3.4 無圈圖9.3.5 所有點對最短路徑9.4 網路流問題9.4.1 一個簡單的最大流演算法9.5 最小生成樹9.5.1 prim演算法9.5.2 kruskal演算法9.6 深度優先搜索的應用9.6.1 無向圖9.6.2 雙連通性9.6.3 歐拉迴路9.6.4 有向圖9.6.5 查找強分支9.7 np-完全性介紹9.7.1 難與易9.7.2 np類9.7.3 np-完全問題總結練習參考文獻第10章 演算法設計技巧10.1 貪婪演算法10.1.1 一個簡單的調度問題10.1.2 huffman編碼10.1.3 近似裝箱問題10.2 分治演算法10.2.1 分治演算法的運行時間10.2.2 最近點問題10.2.3 選擇問題10.2.4 一些運算問題的理論改進10.3 動態規劃10.3.1 用一個表代替遞歸10.3.2 矩陣乘法的順序安排10.3.3 最優二叉查找樹10.3.4 所有點對最短路徑10.4 隨機化演算法10.4.1 隨機數發生器10.4.2 跳躍表10.4.3 素性測試10.5 回溯演算法10.5.1 收費公路重建問題10.5.2 博弈總結練習參考文獻第11章 攤還分析11.1 一個無關的智力問題11.2 二項隊列11.3 斜堆11.4 斐波那契堆11.4.1 切除左式堆中的節點11.4.2 二項隊列的懶惰合並11.4.3 斐波那契堆操作11.4.4 時間界的證明11. 5 伸展樹總結練習參考文獻第12章 高級數據結構及其實現12.1 自頂向下伸展樹12.2 紅黑樹12.2.1 自底向上插入12.2.2 自頂向下紅黑樹12.2.3 自頂向下刪除12.3 確定性跳躍表12.4 aa-樹12.5 treap樹12.6 k-d樹12.7 配對堆總結練習參考文獻索引
Ⅱ 《數據結構與演算法分析》和《演算法導論》這兩本書哪個好
演算法導論堪稱經典啊,還有黑書,也稱為經典。沒有學高等數學完全沒關系的,只是個思維問題。學演算法就是堅持堅持,堅持就是勝利。不過會很辛苦的。有空多上POJ做做題。
Ⅲ 數據結構與演算法分析 C++語言描述 pdf
http://wenku..com/search?word=%CA%FD%BE%DD%BD%E1%B9%B9%D3%EB%CB%E3%B7%A8%B7%D6%CE%F6+C%2B%2B%D3%EF%D1%D4%C3%E8%CA%F6+%BB%C6%B4%EF%C3%F7&lm=0&od=0
要是不能下載我給你傳一份,QQ:136051720
Ⅳ 數據結構與演算法分析與數據結構有什麼區別
挺繞人的,不過大體一個是模型,一個是處理模型的方法
Ⅳ 數據結構與演算法分析
數據結構與演算法分析(C++版第2版)/國外計算機科學教材系列
作者:著者:美Shaffer,C.A;譯者:張銘等譯 出版社:電子工業出版社
Ⅵ 數據結構與演算法分析 c語言描述 難不難
您好!!
C語言的基本語法你只要掌握了,,數據結構都不是問題
數據結構就是 數據的組織方式 或者說 是一種更便捷的讓程序更高效的方法。這裡面用到的都是C語言的基礎知識。
就像你做飯 一個辣椒可以炒素菜、可以炒葷菜、也可以炸成辣椒油……
同樣一個東西 根據自己目的的不同 選擇一個最高效的方法 就是數據結構與演算法的目的.
書上的數據結構與演算法 只是給你一些實際應用中的列子和一些基本方法,現實中做程序還需要你自己根據自己的需要去組合去研究更好的演算法……
很高興為您解答,不懂的來問我,。謝謝!!
Ⅶ 數據結構與演算法分析練習
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<stack>
usingnamespacestd;
structnode{
inte;
structnode*next;
};
/**
*初始化link
*head為根節點,不保存數據
*/
structnode*initLink(structnode*link){
link=(structnode*)malloc(sizeof(structnode));
link->next=NULL;
structnode*q=link;
intn=0;
while(n!=-1){//終止條件自行修改,比方說,建立n個節點
cin>>n;
if(n>0){
structnode*t=(structnode*)malloc(sizeof(structnode));
t->e=n;
t->next=NULL;
q->next=t;
q=t;
}
}
returnlink;
}
/**逆置(頭插法)
*另有,遞歸法。遞歸法耗用資源多,頭插法比較好。
*#成功逆置返回1,否則返回0(不會有0的情況發生)
*/
intReverseList(structnode*head){
structnode*p=head->next,*q;
head->next=NULL;
while(p){
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
return1;
}
/**
*#列印出轉換的N進制數(N<9),成功返回1,否則返回0
*/
intten_to_N(intx,intN){
intr=-1;
if(x>0){
r=x%N;
ten_to_N(x/N,N);
}
if(r>=0)
printf("%d",r);
return1;
}
structqueue{
stack<int>s1,s2;
};
/**
*#將x插入到隊列q中,成功返回1,否則返回0
*/
intenqueue(structqueue*q,intx){
if(q->s1.size()>0)
q->s1.push(x);
else{
while(q->s2.size()>0){
q->s1.push(q->s2.top());
q->s2.pop();
}
q->s1.push(x);
}
return1;
}
/**
*#隊列q執行出隊操作,成功則返回出隊的元素,否則返回0
*/
intdequeue(structqueue*q){
intt=0;
if(q->s2.size()>0){
q->s2.top();
q->s2.pop();
}else{
while(q->s1.size()>1){
q->s2.push(q->s1.top());
q->s1.pop();
}
if(q->s1.size()==1){
t=q->s1.top();
q->s1.pop();
}
}
returnt;
}
intmain()
{
structnode*head=NULL;
head=initLink(head);
if(ReverseList(head)==1){
structnode*p=head->next;
while(p){
printf("%d",p->e);
p=p->next;
}
printf(" ReverseListdone. ");
}
ten_to_N(10,4);
structnode*q;
while(head){
q=head->next;
free(head);
head=q;
}
}
Ⅷ 數據結構與演算法分析的作者簡介
MarkAllenWeiss,1987年在普林斯頓大學獲得計算機科學博士學位,師從著名演算法大師RobertSedgewick,現任美國佛羅里達國際大學計算與信息科學學院教授。他曾經擔任全美AP(AdvancedPlacement)考試計算機學科委員會的主席(2000-2004)。他的主要研究方向是數據結構,演算法和教育學。
Ⅸ java數據結構與演算法分析
於之前面試android的時候考到了很多關於java的知識,所以這次重溫數據結構知識就打算用java來學習,畢竟android是以java為基礎的,而且我現在學習的j2ee架構也是以java為基礎的。
java中的類就是對現實世界的對象的一種抽象,例如人就是一個類別,人有名字,聯系電話,住址等成員屬性,人擁有說話,吃飯,走路等成員方法。類就是這樣,定義了一種對象,它有什麼,會做什麼。
繼承——子類就是父類的一種特定類別。例如學生就是人的子類,學生屬於人,是特定的一類人。所以我們讓學生繼承人,這樣學生可以擁有人的屬性和方法,也就是說,學生也有了名字,聯系電話,住址等成員屬性,擁有說話,吃飯,走路等成員方法。但是學生還有特定的一些方法(讀書,上課),或者特定的一些屬性(學號,年級),這些可以添加在子類中。
因為每個子類都屬於父類,例如每個學生都屬於人,所以可以用父類來引用子類的對象:People p = new Student();反過來不行。
java中一個類只能繼承一個父類,也就是單繼承。
但一個類可以實現多個介面,間接地實現了多繼承。介面就是一系列方法的聲明,沒有實現。於之前面試android的時候考到了很多關於java的知識,所以這次重溫數據結構知識就打算用java來學習,畢竟android是以java為基礎的,而且我現在學習的j2ee架構也是以java為基礎的。
java中的類就是對現實世界的對象的一種抽象,例如人就是一個類別,人有名字,聯系電話,住址等成員屬性,人擁有說話,吃飯,走路等成員方法。類就是這樣,定義了一種對象,它有什麼,會做什麼。
繼承——子類就是父類的一種特定類別。例如學生就是人的子類,學生屬於人,是特定的一類人。所以我們讓學生繼承人,這樣學生可以擁有人的屬性和方法,也就是說,學生也有了名字,聯系電話,住址等成員屬性,擁有說話,吃飯,走路等成員方法。但是學生還有特定的一些方法(讀書,上課),或者特定的一些屬性(學號,年級),這些可以添加在子類中。
因為每個子類都屬於父類,例如每個學生都屬於人,所以可以用父類來引用子類的對象:People p = new Student();反過來不行。
java中一個類只能繼承一個父類,也就是單繼承。
但一個類可以實現多個介面,間接地實現了多繼承。介面就是一系列方