當前位置:首頁 » 操作系統 » 數據結構演算法教程

數據結構演算法教程

發布時間: 2022-05-18 06:50:53

『壹』 怎麼才能學好數據結構

1、 數據結構學習一定要自己獨立完成代碼實現,雖然有時候你理
解內容了,但是實現上面還是會愈要很多困難的,解決這些困難會幫助你提高程序設計的能力的。
2、 數據結構是計算機專業最重要最基礎的一門課,對於有過編程
經驗的人,結合自己的編程體會,去領悟它的思想;對於初學者,撿一種自己最熟悉的語言去分析它,總之千萬不要陷在語言的細節上,要高屋建瓴的去領會數據結構的思想。而且隨著編程經歷的豐富對它的體會越深入,最初接觸是對一些思想可能只是生硬的記憶,隨著學習的深入逐漸領悟了很多。對於實在弄不懂的東東,就先記住!!!
3、 將各種數據結構演算法爛熟於胸,這是一個優秀程序員的必須具
備的基本素質,是後來進步的基石。書上的例子自己看看,然後不看書自己想想做成代碼,在以後使用的時候看看能不能用這些數據結構來解決問題。
4、 自己試著把書上的數據結構盡量寫成可復用的獨立模板(模
塊),以後用著方便,學得也深刻, 以後復習不用看書了,反復溫習即便自己的代碼就行了, 說實話,找工作面試的時候數據結構幾乎是必問的!
5、 我覺的學數據結構,應該從演算法入手,不能急,我現在還在搞
數據結構呀!不過現在覺的不那麼難了呀!因為主要是演算法,一點一點理清,會有柳暗花明的時候的。

6、 數據結構要反復看書,量變引起質變,可能一開始看不太懂,
單當看多了的時候,你會茅塞頓開!
7、 我覺得數據結構要的是思想,學的也是思想, 但你至少要熟練
一門語言,要麼怎能檢驗你的思想是否正確,強烈推薦《STL源碼剖析》!!!結合STL中的源碼去分析,STL是我看到的最全的以數據結構為宗旨的一種庫,還建議你去下一個STLPORT,之中的源碼比VC提供的好些,很全,基本上能夠用到的數據結構都涉及到了,並且在學這個庫的過程當中還可以學習一些設計模式,還可以學習VC中的范型運算思想,等等,開始行動吧!!! 8、 怎樣學習數據結構,最好方法是一起討論。
9、 1)如果你沒有學過c語言,或者C語言學的不好的時候把數據
結構當成一本數學書來學,它所講述的都是一些簡單的圖論。在你的大腦中的主線不能丟失:線性結構,樹結構和圖結構。當你不再考慮復雜的程序設計時,僅僅研究個個離散點之間的關系,似乎數據結構也就不會那麼難了。
2)學習好了抽象的離散點關系後,再鞏固一下你的C語言水平,書中描述的都是類C。因此你只要學習簡單的C定義、判斷、循環語句就基本能看的懂課本中所有程序了。
3)以上都完成後,從數據結構的線性表開始。線性表中順序表,似乎是為你學習C語言設計的,學好線性表的鏈表是你起步的關鍵。後面的樹結構,圖結構,排序,查找都少不了鏈式結構,往往這個也是最難的。
4)看程序的時候一定要自己在紙上畫畫,最好先學會畫程序的流程

圖,也許那樣你學程序也就會更快一些。
5)數據結構是程序設計的最基本也是最有用的地方,學完之後你會受益匪淺的。
10、 多找些難題搞搞,就知道數據結構的魅力了,因為好些題只有用
合適的數據才能做到做好。當你想用一種數據結構來解決某個問題卻不知道怎麼用時,這時學起來就很快。
11、 我根據我個人的學習經驗我覺得很多人的誤區是背演算法而不是
通過結構來想自己的演算法。演算法操作數據結構而數據結構的設計的好壞直接影響到演算法。
12、 學習的方法只有一種,那就是 管它是什麼,先學再說,至於怎
樣才能學好嘛,這因人而定,每個人的思考方式都不同,看待問題不可能總是一樣,適合別人的不一定就適合你,適合你的也不一定適合別人,不過一種通用的方法就是,信心 + 恆心 + 悟性 + 好的書籍

『貳』 數據結構演算法編程

/**<
數據結構實驗編程,要求如下:
1)單鏈表結點類的定義。
2)單鏈表類的定義。
3)在單鏈表的第i個結點前插入一個結點。
4)在單鏈表的第i個結點前刪除一個結點。
5)在單鏈表中查找第i個結點。
6)更新單鏈表中第i個結點的值。
7)遍歷單鏈表。
希望給出源程序,讓我好好研究一下。前提必須要能運行出正確的結果。謝謝!我用的軟體是Devc++,
如果可以運行出正確結果,定採納!再次感謝!
*/
#include<iostream>
usingnamespacestd;
classNode{
public:
Node(){
id=0;
next=NULL;
}
Node(inti){
id=i;
next=NULL;
}
intid;
Node*next;
};
classChain{
private:
Node*head;
//Node*tail;
intnum;
public:
Chain(){
head=NULL;
//tail=NULL;
num=0;
}
~Chain(){
Node*t=head;
while(t)
{
head=t->next;
deletet;
t=head;
}
cout<<"release"<<endl;
}
voidsetHead(Node*head){
this->head=head;
}
Node*getHead(){
returnhead;
}
voidsetNum(intnum){
this->num=num;
}
intgetNum(){
returnnum;
}
boolinsertIns(Node*ins);
boolinsBefore(Node*ins,inti);
booldelBef(inti);
Node*findI(inti);
boolupdate(inti,intid);
voidChain::travel();
};
boolChain::insertIns(Node*ins){
if(!ins)
returnfalse;
if(NULL==head){
head=ins;
num++;
returntrue;
}
Node*cur=head;
while(NULL!=cur->next)
{
cur=cur->next;
}
cur->next=ins;
num++;
returntrue;
}

boolChain::insBefore(Node*ins,inti)
{
if(i==1){
ins->next=head;
head=ins;
num++;
returntrue;
}
if(i>this->num)
returnfalse;
intpre=i-1;
intcur=1;
Node*curPt=head;
while(curPt&&cur!=pre)
{
curPt=curPt->next;
cur++;
}
if(NULL!=curPt&&cur==pre)
{
cout<<"insBefore:curPt.id="<<curPt->id<<endl;
Node*t=curPt->next;
curPt->next=ins;
ins->next=t;
this->num++;
returntrue;
}
returnfalse;
}
boolChain::delBef(inti)
{
if(i<=1||i>num)
returnfalse;
Node*res=findI(i-2);
if(NULL==res)
{
res=findI(i-1);
if(res==head)
{
head=head->next;
deleteres;
num--;
returntrue;
}
else
returnfalse;//onlyone
}else{
Node*tmp=res->next->next;
Node*tar=res->next;
deletetar;
res->next=tmp;
num--;
returntrue;
}
//if(i<0||i>num)
//returnfalse;
//Node*tmp=NULL;
//if(1==i)
//{
//tmp=head->next;
//deletehead;
//head=tmp;
//num--;
//returntrue;
//}
//Node*p=findI(i-1);
//if(p){
//tmp=p->next->next;
//deletep->next;
//p->next=tmp;
//num--;
//}
//else{
//returnfalse;
//}
//returntrue;
}
Node*Chain::findI(inti)
{
if(i<0||i>num)
returnNULL;
intcur=1;
Node*p=head;
while(cur!=i){
p=p->next;
cur++;
}
returnp;
}
boolChain::update(inti,intid)
{
Node*res=findI(i);
boolflag=false;
if(res)
{
res->id=id;
flag=true;
}
returnflag;
}
voidChain::travel(){
Node*cur=head;
while(cur)
{
cout<<cur->id<<"";
cur=cur->next;
}
cout<<endl;
}
intmain()
{
Node*npt=NULL;
Chain*cpt=newChain;
for(inti=0;i<9;i++){
npt=newNode;
if(npt){
npt->id=i+1;
cpt->insertIns(npt);
}
}
if(NULL==cpt)
return-1;
cpt->travel();
cout<<"here ";
boolres=false;
if(npt)
{
npt=newNode(12);
res=cpt->insBefore(npt,7);
if(res)
cpt->travel();
else
cout<<"insBeforefailed! ";
}
cout<<"here2 ";
//
res=cpt->delBef(1);
cout<<"here2.2 ";
if(res)
{
cout<<"del1"<<endl;
cpt->travel();
}
cout<<"here2.5 ";
res=cpt->delBef(5);
cout<<"here3 ";
if(res)
{
puts("del5[[[[");
cpt->travel();
puts("del5]]]]");
}
///
npt=cpt->findI(5);
printf("findIid=%d ",npt->id);
cpt->travel();
///
cpt->update(5,99);
cpt->travel();
cout<<"------"<<endl;
return0;
}
//簡單測試了一下

『叄』 如何自學數據結構與演算法

在學習語言初期時 對數據結構和演算法確實是沒有太多體會的因為開始時編的程序比較簡單 應用數據結構需要一定的水平之後數據結構和演算法在大規模程序 提高性能上很有用 開始學習的時候不要急 先把基本的編程例子全做過 編的多了 慢慢就會體會到了開始學習時 實現功能最重要 慢慢的改進 提高效率 用到演算法和數據結構

『肆』 怎麼學習數據結構(嚴蔚敏的c語言版)

1、如果你沒有學過C語言,或者C語言學的不好的時候把數據結構當成一本數學書來學,它所講述的都是一些簡單的圖論。在你的大腦中的主線不能丟失:線性結構,樹結構和圖結構。當你不再考慮復雜的程序設計時,僅僅研究個個離散點之間的關系,似乎數據結構也就不會那麼難了。

2、學習好了抽象的離散點關系後,再鞏固一下你的C語言水平,書中描述的都是類C。因此你只要學習簡單的C定義、判斷、循環語句就基本能看的懂課本中所有程序了。

3、以上都完成後,從數據結構的線性表開始。線性表中順序表似乎是為你學習C語言設計的,學好線性表的鏈表是你起步的關鍵。後面的樹結構,圖結構,排序,查找都少不了鏈式結構,往往這個也是最難的。

4、看程序的時候一定要自己在紙上畫畫,最好先學會畫程序的流程圖,也許那樣你學程序也就會更快一些。

5、數據結構是程序設計的最基本也是最有用的地方,學完之後你會受益匪淺的,也許這本書可以決定你以後的道路或者命運。

6、c語言是最基礎的課程,考計算機的研肯定的學c語言了,怎麼不提前准備呀,嚴蔚敏的書太理論了,我建議你看一本《數據結構案例教程(c語言版)》的書,這本書主要是講的案例,就是演算法的實現,你在結合嚴蔚敏的書看理論,我覺得這樣會容易點吧,數據結構是建立在某一種語言的基礎上實現的,如果你會C++JAVA等語言的話,你當務之急就不要看c語言版的數據結構,C++版的或是JAVA版的數據結構都行,你先拿先來然後再學c語言。

『伍』 數據結構與演算法(c++)的視頻教程和PDF,急求!!!!

在電驢找吧,那裡p2p資源多,我的視頻太大,不方便傳

『陸』 如何學習數據結構與演算法

1、記住數據結構,記住演算法思想(是什麼)

記住數據結構最直觀的東西;記憶該數據結構的定義、性質、特點等。很多東西的理解和創新都是以記憶為前提的。


2、進行大量相關編程練習,用編程語言去實現某一數據結構上的演算法(怎麼辦)


很多時候,理解一個演算法很容易,很容易在紙上去模擬一個演算法的實現過程。但具體實現,則是另一回事。一定得先自己思考,然後再去看書中給的編程語言實現。


3、“記住”特定情景下,利用某一特定的數據結構,去解決問題 (為什麼+怎麼辦)


每介紹一種數據結構,浙大數據結構與演算法的MOOC課程都會有一個實際問題來作為“引子”,回答了“這種數據結構為什麼會出現”。有的是為了實現特定的操作,有的是為了時間和空間上(大部分考慮的是時間復雜性)效率的更高(所以,沒事的時候,分析一下演算法的時間復雜性)。這些東西,我們也須理解記憶。每一數據結構都有其特性,去解決某一類問題,我們需要去記憶,去感悟。


4、形成一個屬於自己的知識體系


如何去“記住”(記好筆記,多多復習);在學習過程中,遇到挫折,產生挫敗感該如何處理(這個是必然會發生的,總有難以理解不會的地方);如何進行心態方面的調整(欲速則不達,不過也有”敏捷學習“的概念)。

『柒』 數據結構的知識

很多同學對數據結構演算法的第一印象,可能是覺得它復雜、深奧、難學。也可能會覺得它不常用,因為在平時的開發過程中,好像不怎麼用到數據結構演算法。

那我們為什麼還要學習數據結構演算法呢?

一個很重要的原因,是為了應對面試。數據結構演算法,可以說是名企面試必考的。也就是說,國內外一線的大型互聯網公司,在面試的過程中,多多少少都會問一些數據結構演算法的題目。規模越大的公司,就越注重數據結構演算法。甚至,現在中小型公司的面試都開始問演算法題了。其實,不管什麼行業,為了篩選出更優秀的人才,隨著時間的推移,面試的難度肯定都會越來越高的。

今年李明傑MJ小碼哥創始人的第一次公開課就是講述《數據結構與演算法》課程大綱:

  • 數據結構演算法這塊的知識點本來就比較多,有些概念也比較復雜,要想徹底搞清楚,肯定需要花多一點時間。

  • 而且我講解每個知識點的時候,都會講得比較細致、比較深入,也會做一些額外的擴展。

  • 另外,我覺得同學們應該要嫌我講得少啊,應該讓我講得更多一點

  • 同學們也可能看到其他的一些數據結構演算法教程,只有10幾個小時,甚至是幾個小時。時間短,就說明講得不夠詳細不夠系統。這樣的後果是什麼呢?你聽了1個小時的課程,可能需要花至少5~10個小時的時間去消化吸收,還要自己去慢慢琢磨。如果老師講解地很細致,你就能理解地更加透徹,那你課後復習鞏固所花的時間就少了

『捌』 有沒有比較好的數據結構和演算法的教學視頻,推薦一個。

郝斌老師的視頻,挺不錯的!

『玖』 求數據結構演算法題詳細解題步驟

#include<iostream>
usingnamespacestd;


typedefstructLNode
{
intdata;
structLNode*next;
}LinkList;

LNode*ptr;

voidCreateHeadNode(LNode*&h)
{
h=(LNode*)malloc(sizeof(LNode));
h->next=NULL;
ptr=h;
}

voidDestory(LNode*&h)
{
LNode*p=NULL;
while(h->next)
{
p=h;
h=h->next;
free(p);
}
}


voidInsert(intvalue)
{
LNode*node;
node=(LNode*)malloc(sizeof(LNode));
node->data=value;
node->next=NULL;
ptr->next=node;
ptr=node;
}


voidDeleteNode(LNode*&head,intdata)
{
LNode*curr=head->next;//當前節點
LNode*pre=head;//當前節點的前驅節點
//找到刪除位置
while(curr!=NULL&&curr->data<data)
{
pre=curr;
curr=curr->next;
}

//刪除節點,可能有連續多個需要刪除
while(curr!=NULL&&curr->data==data)
{
LNode*del=curr;
pre->next=curr->next;
curr=curr->next;
free(del);
}
}voidDispList(LinkList*L)
{
LinkList*p=L->next;
while(p!=NULL)
{
cout<<p->data<<"";
p=p->next;
}
cout<<endl;
}

intmain()
{
intdata;
LinkList*list;
intarr[]={0,1,3,3,3,4,5,6,7,8};

CreateHeadNode(list);
for(inti=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
Insert(arr[i]);
}

cout<<"刪除前:";

DispList(list);

cout<<"輸入待刪除的節點值:";
cin>>data;
DeleteNode(list,data);

cout<<"刪除後:";
DispList(list);

Destory(list);
return0;
}

vs2005測試通過:
刪除前:013334567889
輸入待刪除的節點值:3
刪除後:014567889
Pressanykeytocontinue...

刪除前:013334567889
輸入待刪除的節點值:5
刪除後:01333467889
Pressanykeytocontinue...

刪除前:013334567889
輸入待刪除的節點值:9
刪除後:01333456788
Pressanykeytocontinue...

『拾』 請問在數據結構和演算法設計方面有哪些經典書籍

清華嚴蔚敏的《數據結構》
電子工業出版社王曉東《計算機演算法設計與分析》
數據結構與演算法分析(C++版)(第二版)

熱點內容
h3c防火牆怎麼保存配置 發布:2025-01-14 02:36:00 瀏覽:891
91網友上傳視頻 發布:2025-01-14 02:31:39 瀏覽:789
linux系統下載iso下載 發布:2025-01-14 02:31:34 瀏覽:698
ftp代理ip 發布:2025-01-14 02:29:46 瀏覽:886
設qq密碼時應該設什麼 發布:2025-01-14 02:13:20 瀏覽:605
劍俠情緣主線腳本 發布:2025-01-14 02:11:05 瀏覽:411
java執行ftp命令 發布:2025-01-14 02:05:21 瀏覽:937
青檸檬編程 發布:2025-01-14 02:05:18 瀏覽:882
下載加密日記本 發布:2025-01-14 02:05:16 瀏覽:539
汽車的假配置有哪些 發布:2025-01-14 02:03:16 瀏覽:42