当前位置:首页 » 操作系统 » 数据结构算法教程

数据结构算法教程

发布时间: 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++版)(第二版)

热点内容
php难招 发布:2025-01-14 19:06:07 浏览:487
sublime编译php 发布:2025-01-14 18:57:16 浏览:307
云计算服务器是什么 发布:2025-01-14 18:56:22 浏览:41
vip域名查询ftp 发布:2025-01-14 18:46:48 浏览:114
格式化linux 发布:2025-01-14 18:35:14 浏览:593
如何进入安卓原生市场 发布:2025-01-14 18:22:06 浏览:558
台式电脑找不到服务器 发布:2025-01-14 18:19:58 浏览:423
androidsdk网盘 发布:2025-01-14 18:17:43 浏览:80
个别用户访问不了腾讯云服务器 发布:2025-01-14 18:03:27 浏览:276
oracle链接sqlserver 发布:2025-01-14 17:58:33 浏览:729