⑴ 张晓丽 数据结构与算法最新版本是哪一年
《数据结构与算法》以基本数据结构和算法设计策略为知识单元,系统地介绍了数据结构的知识与应用、计算机算法的设计与分析方法,主要内容包括线性表、树、图和广义表、算法设计策略以及查找与排序算法等。《数据结构与算法》注重理论与实践相结合,内容深入浅出,可以作为高等院校计算机学科相关专业的教材或参考书,同时对计算机科技工作者也有参考价值。
⑵ 数据结构与算法,有图有答案,刚入门,题目没看懂,希望可以有详细过程解答
答案应该是A,要释放中间链应该先把上一个的指针指向后一个,后一个的指针指向上一个,然后再来释放中间这个,千万不能动T指针
⑶ 数据结构与算法30讲
你用BT下载去阿,有好多的,你搜索一下.
http://bt.fkee.com/
⑷ 数据结构与算法的问题
struct List
{
int data ;
List *next ;
};
typedef struct List List ;
List * ReverseList(List *head)
{
if ( head == NULL || head->next == NULL )
return head;
List *p1 = head ;
List *p2 = p1->next ;
List *p3 = p2->next ;
p1->next = NULL ;
while ( p3 != NULL )
{
p2->next = p1 ;
p1 = p2 ;
p2 = p3 ;
p3 = p3->next ;
}
p2->next = p1 ;
head = p2 ;
return head ;
}
或者这样吧:
template <class T> class tb
{
public:
//UserInterFace BEGIN:
bool AddData(const T dt,const int position);
bool DeteleData(const int position);
T GetData(const int poistition);
bool Reverse();
tb(int maxp=1) {max=maxp;d=false;ExpandSpace();count=0;}
//UserInterFace END;
private:
T *d;
int count;
int max;
T *newspace;
bool ExpandSpace();
bool ShrinkSpace();
bool DataMove();
};
template<class T> bool tb<T>::ExpandSpace()
{
max++;
int nim=static_cast<int>(pow(2.0,max));
try
{
newspace = new T[nim];
}
catch(...)
{
return false;
}
return DataMove();
}
template<class T> bool tb<T>::ShrinkSpace()
{
if (max>0) max--;
else return false;
try
{
newspace = new T[static_cast<int>(pow(2,max))];
}
catch(...)
{
return false;
}
return DataMove();
}
template<class T> bool tb<T>::DataMove()
{
try
{
if(d)
{
for(int i=1;i<=count;i++)
{
newspace[i-1]=d[i-1];
}
delete[] d;
}
d=newspace;
}
catch(...)
{
return false;
}
return true;
}
template<class T> bool tb<T>::AddData(const T dt,const int position)
{
if(count==pow(2,max))
{
if(ExpandSpace()!=true) return false;
}
int pos=0;
count++;
if(position==0) pos=count-1;
else pos=position;
if(position>count || position <0) return false;
for(int i=count;i>=pos;i--)
{
d[i+1]=d[i];
}
d[position]=dt;
return true;
}
template<class T> bool tb<T>::DeteleData(const int position)
{
if(count==pow(2,max-1))
{
if(ShrinkSpace()!=true) return false;
}
if(position>count || position <0) return false;
for(int i=count;i>=position;i--)
{
d[i]=d[i+1];
}
count--;
return true;
}
template <class T> T tb<T>::GetData(const int position)
{
if(position>count ||position<0) return *d;
else return *(d+position-1);
}
template <class T> bool tb<T>::Reverse()
{
try
{
for(int i=0;i<=count/2;i++)
{
int temp=d[i];
d[i]=d[count-i];
d[count-i]=temp;
}
}
catch(...)
{
return false;
}
return true;
}
int main(int argc, char* argv[])
{
tb<int> lp;
for(int i=1;i<=10;i++)
{
int t;
cout<<lp.AddData(i,1)<<endl;
}
lp.Reverse();
for(int i=2;i<=10;i++)
{
int p = lp.GetData(i);
cout<<i<<'\t'<<p<<endl;
}
while(getchar());
return 0;
}
⑸ 数据结构与算法分析
本文出自:
www点54manong点com
请尊重原创,转载请注明出处,谢谢!
什么是数据结构,为什么要学习数据结构?数据结构是否是一门纯数学课程?它在专业课程体系中起什么样的作用?我们要怎么才能学好数据结构?… 相信同学们在刚开始《数据结构》这门课的学习时,心里有着类似前面几个问题的这样那样的疑问。希望下面的内容能帮助大家消除疑惑,下定决心坚持学好这门课:
1 学习数据数据结构的意义
数据结构是计算机科学与技术专业、计算机信息管理与应用专业,电子商务等专业的基础课,是十分重要的核心课程。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付当前众多复杂的课题。要想有效地使用计算机、充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。打好“数据结构”这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统、数据库管理系统、软件工程、编译原理、人工智能、图视学等都是十分有益的。
2 为什么要学习数据结构
在计算机发展的初期,人们使用计算机的目的主要是处理数值计算问题。当我们使用计算机来解决一个具体问题时,一般需要经过下列几个步骤:首先要从该具体问题抽象出一个适当的数学模型,然后设计或选择一个解此数学模型的算法,最后编出程序进行调试、测试,直至得到最终的解答。例如,求解梁架结构中应力的数学模型的线性方程组,可以使用迭代算法来求解。
由于当时所涉及的运算对象是简单的整型、实型或布尔类型数据,所以程序设计者的主要精力是集中于程序设计的技巧上,而无须重视数据结构。随着计算机应用领域的扩大和软、硬件的发展,非数值计算问题越来越显得重要。据统计,当今处理非数值计算性问题占用了85%以上的机器时间。这类问题涉及到的数据结构更为复杂,数据元素之间的相互关系一般无法用数学方程式加以描述。因此,解决这类问题的关键不再是数学分析和计算方法,而是要设计出合适的数据结构,才能有效地解决问题。下面所列举的就是属于这一类的具体问题。
例1:图书馆信息检索系统。当我们根据书名查找某本书有关情况的时候;或者根据作者或某个出版社查找有关书籍的时候,或根据书刊号查找作者和出版社等有关情况的时候,只要我们建立了相关的数据结构,按照某种算法编写了相关程序,就可以实现计算机自动检索。由此,可以在图书馆信息检索系统中建立一张按书刊号顺序排列的图书信息表和分别按作者、书名、出版社顺序排列的索引表,如图1.1所示。由这四张表构成的文件便是图书信息检索的数学模型,计算机的主要操作便是按照某个特定要求(如给定书名)对图书馆藏书信息文件进行查询。
诸如此类的还有学生信息查询系统、商场商品管理系统、仓库物资管理系统等。在这类文档管理的数学模型中,计算机处理的对象之间通常存在着的是一种简单的线性关系,这类数学模型可称为线性的数据结构。
例2:八皇后问题。在八皇后问题中,处理过程不是根据某种确定的计算法则,而是利用试探和回溯的探索技术求解。为了求得合理布局,在计算机中要存储布局的当前状态。从最初的布局状态开始,一步步地进行试探,每试探一步形成一个新的状态,整个试探过程形成了一棵隐含的状态树。如图1.2所示(为了描述方便,将八皇后问题简化为四皇后问题)。回溯法求解过程实质上就是一个遍历状态树的过程。在这个问题中所出现的树也是一种数据结构,它可以应用在许多非数值计算的问题中。
例3:教学计划编排问题。一个教学计划包含许多课程,在教学计划包含的许多课程之间,有些必须按规定的先后次序进行,有些则没有次序要求。即有些课程之间有先修和后续的关系,有些课程可以任意安排次序。这种各个课程之间的次序关系可用一个称作图的数据结构来表示,如图1.3所示。有向图中的每个顶点表示一门课程,如果从顶点vi到vj之间存在有向边<vi,vj>,则表示课程i必须先于课程j进行。由以上三个例子可见,描述这类非数值计算问题的数学模型不再是数学方程,而是诸如线性表、树、图之类的数据结构。因此,可以说数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。
学习数据结构的目的是为了了解计算机处理对象的特性,将实际问题中所涉及的处理对象在计算机中表示出来并对它们进行处理。与此同时,通过算法训练来提高学生的思维能力,通过程序设计的技能训练来促进学生的综合应用能力和专业素质的提高。
3数据结构课程的内容
数据结构与数学、计算机硬件和软件有十分密切的关系,它是介于数学、计算机硬件和计算机软件之间的一门计算机专业的核心课程,是高级程序设计语言、操作系统、编译原理、数据库、人工智能、图视学等课程的基础。同时,数据结构技术也广泛应用于信息科学、系统工程、应用数学以及各种工程技术领域。
数据结构课程重在讨论软件开发过程中的方案设计阶段、同时设计编码和分析阶段的若干基本问题。此外,为了构造出好的数据结构及其实现,还需考虑数据结构及其实现的评价与选择。因此,数据结构的内容包括三个层次的五个“要素”,如图1.3所示。
数据结构的核心技术是分解与抽象。通过分解可以划分出数据的三个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。上述两个方面的结合使我们将问题变换为数据结构。这是一个从具体(即具体问题)到抽象(即数据结构)的过程。然后,通过增加对实现细节的考虑进一步得到存储结构和实现运算,从而完成设计任务。这是一个从抽象(即数据结构)到具体(即具体实现)的过程。熟练地掌握这两个过程是数据结构课程在专业技能培养方面的基本目标。
结束语:数据结构作为一门独立的课程在国外是从1968年才开始的,但在此之前其有关内容已散见于编译原理及操作系统之中。20世纪60年代中期,美国的一些大学开始设立有关课程,但当时的课程名称并不叫数据结构。1968年美国唐.欧.克努特教授开创了数据结构的最初体系,他所着的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的着作。从20世纪60年代末到70年代初,出现了大型程序,软件也相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视数据结构。从70年代中期到80年代,各种版本的数据结构着作相继出现。目前,数据结构的发展并未终结,一方面,面向各专门领域中特殊问题的数据结构得到研究和发展,如多维图形数据结构等;另一方面,从抽象数据类型和面向对象的观点来讨论数据结构已成为一种新的趋势,越来越被人们所重视。
⑹ 数据结构中什么是边结点
在邻接表表示中有两种结点结构,一种是顶点结点的结构,他由顶点域和指向第一条邻接边的指针域构成,另一种是边结点结构,它由邻接点域和指向吓一跳邻接边的指针域构成。
-张小莉.数据结构与算法(第3版)[M].机械工业出版社
⑺ 数据结构与算法图书
原书名: 数据结构与算法:C#语言描述
原出版社:
作者: (美)Michael McMillan
出版社: 人民邮电出版社
书号: 9787115204271 出版日期:2009-5-1 0:00:00 开本: 16开 页码: 260 版次: 1-1
市场价: ¥49.00
⑻ 数据结构与算法
看题可知实际上就是要从表A中删除出现在表B和表C交集D里的元素
那么首先肯定是要先确定表B和表C和交集D,由于ABC都是递增线性表,所以可以确定B和表C和交集D的边界(可以不用从头到尾来遍历表B和表C,属于优化范畴),之后再遍历A表删除其在D中的元素,遍历时同样适用上面的边界处理
既然是要嵌套遍历三个表那么时间复杂度自然就是na*nb*nc