csdn數據結構與演算法
Ⅰ 做java程序員都要看哪些書
我就是去年剛畢業的 ,買了好多書,開始買的是java聖經--《java編程思想》但是不適合初學者,因為是外文翻譯過來的,初學者很難懂,但它確實經典。後來我挑了很多書,我選中了《由淺入深學java》李志剛寫的,電子工業出版社。我主要看中了裡面不但有講解,還有小練習,練習還有答案,這個對初學者很好。我用的技術是jsp+oracle。所以還買了一本資料庫書《從入門到精通oracle11》中國水利水電出版社,錢慎一,張素智寫的。沒深看,就學習基本的資料庫添加、修改、刪除語句。看了這兩本書,我還是對我整個工程結構不明白,我有買了本《java web輕量級開發全體驗》鄧子雲系的,電子工業出版社。這本書讓我對框架有了清楚的了解還介紹用eclipse軟體如何開發,我覺得非常值得你一看。
書是必須看的,此外我還經常去網路文庫搜索我遇到的新鮮的技術術語,網路文庫里我也學到了不少技術,js、spring、ssh、ibatis啊這些東西你不可能樣樣都買書,所以從網上看一樣。沒事我還經常去csdn網站,了解咱們IT行業最新前景,這都對咱們新手有很大幫助。
不明白的地方我經常去網路知道問,也會去幫助別人解答。這對自己知識的理解都有好處。
祝你學習愉快
Ⅱ 數據結構實現csdn 嚴蔚敏 我的郵箱:[email protected]
http://passport.csdn.net/UserLogin.aspx,發給網址給你,我試過了,可以登,自己去下吧。
Ⅲ 我想向程序員方面發展,自學需要學哪些課程和學習的順序,謝謝大家多多幫忙。
基礎課程包括:計算機硬體基礎、計算機網路基礎、操作系統、計算機組成原理、計算機體系結構、資料庫原理、軟體工程、離散數學、演算法設計與分析、數據結構、編譯原理
編程語言可以根據需要選擇,底層開發人員必學:匯編語言、c、c++;web應用表示層開發人員:html、xml、javascript、jsp(或asp,php)等;普通應用程序開發:c++、vb、.net(其中包括多種語言,可根據現有基礎選擇)、java等。
如果你是學生,或者如果你有充足的時間。我建議你仔細的掌握下面的知識。我的建議是針對那些希望在IT技術上有所成就的初學者。同時我還列出了一些書目,這些書應該都還可以在書店買到。說實在的,我在讀其他人的文章時最大的心願就是希望作者列出一個書單。
大學英語——不要覺得好笑。我極力推薦這門課程是因為沒有專業文檔的閱讀能力是不可想像的。中文的翻譯往往在猴年馬月才會出來,而現在的許多出版社乾脆就直接把E文印刷上去。學習的方法是強迫自己看原版的教材,開始會看不懂,用多了自然熟練。吃得苦下得狠心絕對是任何行業都需要的品質。
計算機體系結構和匯編語言——關於體系結構的書遍地都是,而且也大同小異,倒是匯編有一本非常好的書。《80x86匯編語言程序設計教程》(清華大學出版社,黑色封面,楊季文著)。你需要著重學習386後保護模式的程序設計。否則你在學習現代操作系統底層的一些東西的時候會覺得是在看天書。
計算機操作系統原理——我們的開發總是在特定的操作系統上進行,如果不是,只有一種可能:你在自己實現一個操作系統。無論如何,操作系統原理是必讀的。這就象我們為一個晶元製作外圍設備時,晶元基本的工作時序是必需了解的。這一類書也很多,我沒有發現哪一本書非常出眾。只是覺得在看完了這些書後如果有空就應該看看《Inside Windows 2000》(微軟出版社,我看的是E文版的,中文的書名想必是Windows 2000 技術內幕之類吧)。
數據結構和演算法——這門課程能夠決定一個人程序設計水平的高低,是一門核心課程。我首選的是清華版的(朱戰立,劉天時)。很多人喜歡買C#版的,但我覺得沒有必要。C#的語法讓演算法實現過程變得復雜多了,而且許多老師喜歡用模塊這一東西讓演算法變得更復雜。倒是在學完了C版的書以後再來瀏覽一下C#的版的書是最好的。
軟體工程——這門課程是越到後來就越發現它的重要,雖然剛開始看時就象看馬哲一樣不知所雲。我的建議是看《實用軟體工程》(黃色,清華)。不要花太多的時間去記條條框框,看不懂就跳過去。在每次自己完成了一個軟體設計任務(不管是練習還是工作)以後再來回顧回顧,每次都會有收獲。
Windows 程序設計——《北京大學出版社,Petzold著》我建議任何企圖設計Windows 程序的人在學習VC以前仔細的學完它。而且前面的那本《Inside Windows 2000》也最好放到這本書的後面讀。
在這本書中,沒有C++,沒有GUI,沒有控制項。有的就是如何用原始的c語言來完成Windows 程序設計。在學完了它以後,你才會發現VC其實是很容易學的。千萬不要在沒有看完這本書以前提前學習VC,你最好碰都不要碰。我知道的許多名校甚至都已經用它作為教材進行授課。可見其重要。
上面的幾門課程我認為是必學的重要課程(如果你想做Windows 程序員)。
對於其它的課程有這樣簡單的選擇方法:如果你是計算機系的,請學好你所有的專業基礎課。如果不是,請參照計算機系的課程表。如果你發現自己看一本書時無法看下去了,請翻到書的最後,看看它的參考文獻,找到它們並學習它們,再回頭看這本書。如果一本書的書名中帶有「原理」兩個字,你一定不要去記憶它其中的細節,你應該以一天至少50頁的速度掌握其要領。盡可能多的在計算機上實踐一種理論或者演算法。
你還可以在CSDN上閱讀到許多書評。這些書評能夠幫助你決定讀什麼樣的書。
Ⅳ 數據結構有哪些csdn
數據結構是在整個計算機科學與技術領域上廣泛被使用的術語。它用來反映一個數據的內部構成,即一個數據由那些成分數據構成,以什麼方式構成,呈什麼結構。數據結構有邏輯上的數據結構和物理上的數據結構之分。邏輯上的數據結構反映成分數據之間的邏輯關系,而物理上的數據結構反映成分數據在計算機內部的存儲安排。數據結構是數據存在的形式。
數據結構是信息的一種組織方式,其目的是為了提高演算法的效率,它通常與一組演算法的集合相對應,通過這組演算法集合可以對數據結構中的數據進行某種操作。
Ⅳ 請問有誰有計算機各種經典演算法的總結性介紹有源代碼最好
http://blog.csdn.net/ctu_85/archive/2008/05/11/2432736.aspx
上面的內容應有盡有,連代碼都給出了:
經典演算法設計方法大雜燴
經典演算法設計方法
一、什麼是演算法
演算法是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。演算法常常含有重復的步驟和一些比較或邏輯判斷。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法的時間復雜度是指演算法需要消耗的時間資源。一般來說,計算機演算法是問題規模n 的函數f(n),演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。時間復雜度用「O(數量級)」來表示,稱為「階」。常見的時間復雜度有: O(1)常數階;O(log2n)對數階;O(n)線性階;O(n2)平方階。
演算法的空間復雜度是指演算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
二、演算法設計的方法
1.遞推法
遞推法是利用問題本身所具有的一種遞推關系求問題解的一種方法。設要求問題規模為N的解,當N=1時,解或為已知,或能非常方便地得到解。能採用遞推法構造演算法的問題有重要的遞推性質,即當得到問題規模為i-1的解後,由問題的遞推性質,能從已求得的規模為1,2,…,i-1的一系列解,構造出問題規模為I的解。這樣,程序可從i=0或i=1出發,重復地,由已知至i-1規模的解,通過遞推,獲得規模為i的解,直至得到規模為N的解。
【問題】 階乘計算
問題描述:編寫程序,對給定的n(n≤100),計算並輸出k的階乘k!(k=1,2,…,n)的全部有效數字。
由於要求的整數可能大大超出一般整數的位數,程序用一維數組存儲長整數,存儲長整數數組的每個元素只存儲長整數的一位數字。如有m位成整數N用數組a[ ]存儲:
N=a[m]×10m-1+a[m-1]×10m-2+ … +a[2]×101+a[1]×100
並用a[0]存儲長整數N的位數m,即a[0]=m。按上述約定,數組的每個元素存儲k的階乘k!的一位數字,並從低位到高位依次存於數組的第二個元素、第三個元素……。例如,5!=120,在數組中的存儲形式為:
3 0 2 1 ……
首元素3表示長整數是一個3位數,接著是低位到高位依次是0、2、1,表示成整數120。
計算階乘k!可採用對已求得的階乘(k-1)!連續累加k-1次後求得。例如,已知4!=24,計算5!,可對原來的24累加4次24後得到120。細節見以下程序代碼。
# include <stdio.h>
# include <malloc.h>
# define MAXN 1000
void pnext(int a[ ],int k)
{ int *b,m=a[0],i,j,r,carry;
b=(int * ) malloc(sizeof(int)* (m+1));
for ( i=1;i<=m;i++) b[i]=a[i];
for ( j=1;j<=k;j++)
{ for ( carry=0,i=1;i<=m;i++)
{ r=(i<a[0]?a[i]+b[i]:a[i])+carry;
a[i]=r%10;
carry=r/10;
}
if (carry) a[++m]=carry;
......
Ⅵ List、set、Map的底層實現原理
java 中集合類的關系
參考文獻:
http://zhangshixi.iteye.com/blog/674856l
https://www.cnblogs.com/leesf456/p/5308358.html
ArrayList是List介面的可變數組非同步實現,並允許包括null在內的所有元素。
底層使用數組實現
該集合是可變長度數組,數組擴容時,會將老數組中的元素重新拷貝一份到新的數組中,每次數組容量增長大約是其容量的1.5倍,這種操作的代價很高。
採用了Fail-Fast機制,面對並發的修改時,迭代器很快就會完全失敗,而不是冒著在將來某個不確定時間發生任意不確定行為的風險
remove方法會讓下標到數組末尾的元素向前移動一個單位,並把最後一位的值置空,方便GC
參考文獻:
1. http://www.cnblogs.com/ITtangtang/p/3948610.htmll
2. https://www.cnblogs.com/leesf456/p/5308843.html
LinkedList是List介面的雙向鏈表非同步實現,並允許包括null在內的所有元素。
底層的數據結構是基於雙向鏈表的,該數據結構我們稱為節點
雙向鏈表節點對應的類Node的實例,Node中包含成員變數:prev,next,item。其中,prev是該節點的上一個節點,next是該節點的下一個節點,item是該節點所包含的值。
它的查找是分兩半查找,先判斷index是在鏈表的哪一半,然後再去對應區域查找,這樣最多隻要遍歷鏈表的一半節點即可找到
參考文獻: http://zhangshixi.iteye.com/blog/672697
參考文獻: http://blog.csdn.net/lizhongkaide/article/details/50595719
HashMap是基於哈希表的Map介面的非同步實現,允許使用null值和null鍵,但不保證映射的順序。
底層使用數組實現,數組中每一項是個單向鏈表,即數組和鏈表的結合體;當鏈表長度大於一定閾值時,鏈表轉換為紅黑樹,這樣減少鏈表查詢時間。
HashMap在底層將key-value當成一個整體進行處理,這個整體就是一個Node對象。HashMap底層採用一個Node[]數組來保存所有的key-value對,當需要存儲一個Node對象時,會根據key的hash演算法來決定其在數組中的存儲位置,在根據equals方法決定其在該數組位置上的鏈表中的存儲位置;當需要取出一個Node時,也會根據key的hash演算法找到其在數組中的存儲位置,再根據equals方法從該位置上的鏈表中取出該Node。
HashMap進行數組擴容需要重新計算擴容後每個元素在數組中的位置,很耗性能
採用了Fail-Fast機制,通過一個modCount值記錄修改次數,對HashMap內容的修改都將增加這個值。迭代器初始化過程中會將這個值賦給迭代器的expectedModCount,在迭代過程中,判斷modCount跟expectedModCount是否相等,如果不相等就表示已經有其他線程修改了Map,馬上拋出異常
參考文獻: http://blog.csdn.net/zheng0518/article/details/42199477
Hashtable是基於哈希表的Map介面的同步實現,不允許使用null值和null鍵
底層使用數組實現,數組中每一項是個單鏈表,即數組和鏈表的結合體
Hashtable在底層將key-value當成一個整體進行處理,這個整體就是一個Entry對象。Hashtable底層採用一個Entry[]數組來保存所有的key-value對,當需要存儲一個Entry對象時,會根據key的hash演算法來決定其在數組中的存儲位置,在根據equals方法決定其在該數組位置上的鏈表中的存儲位置;當需要取出一個Entry時,也會根據key的hash演算法找到其在數組中的存儲位置,再根據equals方法從該位置上的鏈表中取出該Entry。
synchronized是針對整張Hash表的,即每次鎖住整張表讓線程獨占
參考文獻: http://blog.csdn.net/zheng0518/article/details/42199477
ConcurrentHashMap允許多個修改操作並發進行,其關鍵在於使用了鎖分離技術。
它使用了多個鎖來控制對hash表的不同段進行的修改,每個段其實就是一個小的hashtable,它們有自己的鎖。只要多個並發發生在不同的段上,它們就可以並發進行。
ConcurrentHashMap在底層將key-value當成一個整體進行處理,這個整體就是一個Entry對象。Hashtable底層採用一個Entry[]數組來保存所有的key-value對,當需要存儲一個Entry對象時,會根據key的hash演算法來決定其在數組中的存儲位置,在根據equals方法決定其在該數組位置上的鏈表中的存儲位置;當需要取出一個Entry時,也會根據key的hash演算法找到其在數組中的存儲位置,再根據equals方法從該位置上的鏈表中取出該Entry。
與HashMap不同的是,ConcurrentHashMap使用多個子Hash表,也就是段(Segment)
ConcurrentHashMap完全允許多個讀操作並發進行,讀操作並不需要加鎖。如果使用傳統的技術,如HashMap中的實現,如果允許可以在hash鏈的中間添加或刪除元素,讀操作不加鎖將得到不一致的數據。ConcurrentHashMap實現技術是保證HashEntry幾乎是不可變的。
參考文獻: http://zhangshixi.iteye.com/blog/673143l
HashSet由哈希表(實際上是一個HashMap實例)支持,不保證set的迭代順序,並允許使用null元素。
基於HashMap實現,API也是對HashMap的行為進行了封裝,可參考HashMap
參考文獻: http://zhangshixi.iteye.com/blog/673789l
LinkedHashMap繼承於HashMap,底層使用哈希表和雙向鏈表來保存所有元素,並且它是非同步,允許使用null值和null鍵。
基本操作與父類HashMap相似,通過重寫HashMap相關方法,重新定義了數組中保存的元素Entry,來實現自己的鏈接列表特性。該Entry除了保存當前對象的引用外,還保存了其上一個元素before和下一個元素after的引用,從而構成了雙向鏈接列表。
參考文獻: http://zhangshixi.iteye.com/blog/673319l
對於LinkedHashSet而言,它繼承與HashSet、又基於LinkedHashMap來實現的。LinkedHashSet底層使用LinkedHashMap來保存所有元素,它繼承與HashSet,其所有的方法操作上又與HashSet相同。
Ⅶ 數據結構與演算法分析 c語言秒速 csdn 好嗎
Sub s()
On Error Resume Next
Dim pth$, fn$, wb As Workbook
Ⅷ 數據結構與演算法分析要什麼基礎 csdn
知道一門語言即可,學起來簡單的推薦iava,然後看下演算法書籍,先看看簡單的數據結構,然後深入看一下演算法導論,應該會很有幫助
Ⅸ 介紹幾個關於C++編程比較好的網站或論壇,最好是天天都有更新
http://csdn.net
中國最大IT技術社區
十部演算法經典著作 合集
http://www.codeguru.cn/cpp/10book
二級試題全集
http://www.codeguru.cn/cpp/2JiCShiTiJi
高質量C++/C編程指南
http://www.codeguru.cn/cpp/AdvanceC++-CProgramGuide
應用C++技術構建優質軟體
http://www.codeguru.cn/cpp/AppliedCpp
ASCII碼表
http://www.codeguru.cn/cpp/ASCII
C\C++語言程序百例
http://www.codeguru.cn/cpp/C&&C++YuanYanChenXuBaili
C++編碼規范與指導
http://www.codeguru.cn/cpp/C++CodingGuide
C++PrimerPlus4th
http://www.codeguru.cn/cpp/C++PrimerPlus4th
C++語言程序設計課件(作者:鄭莉)
http://www.codeguru.cn/cpp/C++ProgramingZhengLi
C++語言程序設計
http://www.codeguru.cn/cpp/C++YuYanChengXuSheJi
C語言函數示例集
http://www.codeguru.cn/cpp/CFunctionExamples
C高級編程技術
http://www.codeguru.cn/cpp/CGaoJiBianCheng
C語言技術文章
http://www.codeguru.cn/cpp/CLanguageArticle
C++疑難解答
http://www.codeguru.cn/cpp/CppAQ
C++實踐之路
http://www.codeguru.cn/cpp/CppInAction
C++應用程序例解
http://www.codeguru.cn/cpp/CppProgramLiJie
C++參考
http://www.codeguru.cn/cpp/cppreference
CPrimerPlus5thEdition習題答案
http://www.codeguru.cn/cpp/CPrimerPlus5thEditionAnswer
C語言編程寶典之一
http://www.codeguru.cn/cpp/Cprogramdict
C語言參考手冊
http://www.codeguru.cn/cpp/Creference
C語言學習和精華文摘
http://www.codeguru.cn/cpp/CStudyAndArticle
數據訪問模式
http://www.codeguru.cn/cpp/DataAccessPatterns
數據結構與演算法綜合資料庫
http://www.codeguru.cn/cpp/DataStructsLibrary
數據結構-嚴蔚敏
http://www.codeguru.cn/cpp/DataStructYanWeiMin
Effective C++
http://www.codeguru.cn/cpp/EffectiveCpp
GenericProgramming
http://www.codeguru.cn/cpp/GenericProgramming
設計模式迷你手冊
http://www.codeguru.cn/cpp/MiniDesignPattern
經典排序演算法
http://www.codeguru.cn/cpp/SortingAlgorithms
譚浩強C語言
http://www.codeguru.cn/cpp/TanHaoQiangC
TheC++ProgrammingLanguage3rdEd
http://www.codeguru.cn/cpp/TheC++ProgrammingLanguage3rdEd
TheCprogrammingLanguage
http://www.codeguru.cn/cpp/TheCprogrammingLanguage
TurboC2.0集成開發環境的使用
http://www.codeguru.cn/cpp/TurboC2ShiYong
用VC開發ACTIVEX
http://www.codeguru.cn/VC&MFC/ActiveXProgramingWithVC
用DirctX9進行高級3D游戲程序設計
http://www.codeguru.cn/VC&MFC/
APracticalGuideUsingVisual C++andATL
http://www.codeguru.cn/VC&MFC/
21天學會VC資料庫編程
http://www.codeguru.cn/VC&MFC/
STL輕松入門
http://www.codeguru.cn/VC&MFC/EasySTL
InsideAtl
http://www.codeguru.cn/VC&MFC/InsideAtl
COM+組件服務技術內幕
http://www.codeguru.cn/VC&MFC/InsideCOM+
MFC參考手冊
http://www.codeguru.cn/VC&MFC/MFCReference
Windows網路編程技術
http://www.codeguru.cn/VC&MFC/
OGRE手冊
http://www.codeguru.cn/VC&MFC/OGREManual
OpenGL基礎圖形編程
http://www.codeguru.cn/VC&MFC/OpenGLJiChuTuXingBianCheng
MFC程序設計
http://www.codeguru.cn/VC&MFC/progmfc2
VC技術內幕
http://www.codeguru.cn/VC&MFC/ProgramingVC
Windows核心編程
http://www.codeguru.cn/VC&MFC/
21天學會ActiveX編程
http://www.codeguru.cn/VC&MFC/TeachYourselfActivexIn21Days
游戲編程大師技巧(第二版)
http://www.codeguru.cn/VC&MFC/
VC編程經驗總結
http://www.codeguru.cn/VC&MFC/VCBianChengJianYanZongJie
VC編程資料
http://www.codeguru.cn/VC&MFC/VCBianChengZiliao
VC常見問題集(中文)
http://www.codeguru.cn/VC&MFC/VCFaqsCN
VC高級編程
http://www.codeguru.cn/VC&MFC/VCGaoJiBianCheng
vchome圖形圖像編程技術篇
http://www.codeguru.cn/VC&MFC/vchomeGraph
VC知識庫
http://www.codeguru.cn/VC&MFC/vckbase
VC語言參考手冊
http://www.codeguru.cn/VC&MFC/VCLANG
vc++ 編程指南
http://www.codeguru.cn/VC&MFC/VCProgramGuide
Windows程序設計
http://www.codeguru.cn/VC&MFC/WindowsProgramming
Winsock程序員疑難解答
http://www.codeguru.cn/VC&MFC/WinsockProgrammerFAQ
Microsoft編程精粹
http://www.codeguru.cn/VC&MFC/WritingCleanCode
Ⅹ 要不要學習數據結構和演算法 csdn
因為數據結構不只是內存中數據的排列,它是對數據的一種組織方式,就像圖書館要排書一樣,是為了便於操作,同時它本身也集成了對通用操作:比如查找、比較等的支持。數組不是一種數據結構,而是一種數據類型。一個完整的數據結構包括邏輯結構和存儲結構。通常選擇了數據結構,演算法也隨之確定,是數據而不是演算法是系統構造的關鍵因素。
因此在語言實現上,數據結構通常也會包含與之相對應的演算法集合,這些演算法是指基本演算法:查找、索引、比較等。
數據結構的邏輯結構和硬體是沒有關系的,而其存儲結構受到計算機硬體系統工作方式的影響,通常這點影響在於數據時順序存儲還是離散存儲。演算法的基礎是數據結構。只有指定明確的數據結構,演算法才能設計完成,脫離數據結構,演算法是無法,也不可能成立的。因為不需要數據的演算法就不是一個有效的計算機演算法,演算法中任何對數據的組織形式都可以被稱之為數據結構。
2.數據結構在編程中的地位是極其重要的,是一個程序實現的基礎中的基礎,在此基礎上才能構建演算法。通常而言,你不了解什麼高深的演算法,一樣能完成工作,但是如果你不了解基本的數據結構,那麼可以說,你根本就不能完成一個任何有實質性內容的程序。Donald Ervin Knuth教授在其《計算機程序設計藝術》的第一卷《基本演算法》中花費的絕大部分的篇幅去論述數據結構。由此可見數據結構對演算法的重要性。