数据结构与算法复习第一天——基础概念,线性表

数据结构的一些基本术语:

数据:客观事物的符号表示

数据元素:数据集合中的一个个体

数据项 组成数据元素

数据对象是数据的子集 由相同性质的数据元素构成

数据结构:带有结构的数据元素的集合

数据结构可以用一个四元组表示(D,L,S,O)

data ,logical structrue ,storage struction operation操作

L——集合,线性,树形,图形

S——存储结构,有顺序,链式,散列

线性表——线性结构,数据元素之间一对一的关系,

N个具有相同类型的数据元素的有限序列

L=(a1,a2,....an)

直接前驱,直接后继

数据结构存储方式有顺序结构和链式存储

链式——用一组任意的不连续的存储单元存储数据元素

一个链表由唯一的头指针确定,链表中的数据元素称为节点

单链表: 数据域和结点域

栈和队列逻辑结构和线性表相同

若是栈中元素的数目变化范围较大或不清楚栈元素的数目,就应该考虑使用链式存储结构。人们将用链式存储结构表示的栈称作"链栈"。链栈通常用一个无头结点的单链表表示。如图所示:

栈的操作是线性表操作的特例。

队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front)

,队列的操作原则是先进先出的,所以队列又称作FIFO表(First In First Out)

那么"假上溢"就是怎么回事呢?

因为在这里,我们的队列是存储在一个向量空间里,在这一段连续的存储空间中,由一个队列头指针和一个尾指针表示这个队列,当头指针和尾指针指向同一个位置时,队列为空,也就是说,队列是由两个指针中间的元素构成的。在队列中,入队和出队并不是象现实中,元素一个个地向前移动,走完了就没有了,而是指针在移动,当出队操作时,头指针向前(即向量空间的尾部)增加一个位置,入队时,尾指针向前增加一个位置,在某种情况下,比如说进一个出一个,两个指针就不停地向前移动,直到队列所在向量空间的尾部,这时再入队的话,尾指针就要跑到向量空间外面去了,仅管这时整个向量空间是空的,队列也是空的,却产生了"上溢"现象,这就是假上溢。

为了克服这种现象造成的空间浪费,我们引入循环向量的概念,就好比是把向量空间弯起来,形成一个头尾相接的环形,这样,当存于其中的队列头尾指针移到向量空间的上界(尾部)时,再加1的操作(入队或出队)就使指针指向向量的下界,也就是从头开始。这时的队列就称循环队列。

通常我们应用的大都是循环队列。由于循环的原因,光看头尾指针重叠在一起我们并不能判断队列是空的还是满的,这时就需要处理一些边界条件,以区别队列是空还是满。方法至少有三种,一种是另设一个布尔变量来判断(就是请别人看着,是空还是满由他说了算),第二种是少用一个元素空间,当入队时,先测试入队后尾指针是不是会等于头指针,如果相等就算队已满,不许入队。第三种就是用一个计数器记录队列中的元素的总数,这样就可以随时知道队列的长度了,只要队列中的元素个数等于向量空间的长度,就是队满。

php的汉诺塔算法

  1. <?php
  2. function hanoi($n,$x,$y,$z){
  3. if($n==1){
  4. move($x,1,$z);
  5. }else{
  6. hanoi($n-1,$x,$z,$y);
  7. move($x,$n,$z);
  8. hanoi($n-1,$y,$x,$z);
  9. }
  10. }
  11. function move($x,$n,$z){
  12. echo ‘move disk ‘.$n.‘ from ‘.$x.‘ to ‘.$z.‘<br/>‘;
  13. }
  14. hanoi(10,‘x‘,‘y‘,‘z‘);
  15. ?>
时间: 2024-10-10 14:27:34

数据结构与算法复习第一天——基础概念,线性表的相关文章

数据结构与算法(一)基础概念

基础概念 数据结构讨论的范畴,算法.数据结构概念,算法和算法的度量 算法讨论的范畴 算法:处理问题的策略. 数据结构:问题的数学模型(非数值计算)及其上的操作在计算机中的表示和实现.数值计算使用计算数学. 数据结构 算法:处理问题的策略. 数据结构:带结构的数据元素的集合. 数据 可输入到计算机中且被计算机处理的符号集合. 数据元素 数据中的一个个体,数据结构中讨论的基本单位. 数据项 数据结构中讨论的最小单位.数据元素是数据项的集合. 数据的逻辑结构 线性结构.树形结构.图状结构.集合结构 数

数据结构与算法--第5周作业(线性表合并算法)

简述顺序存储结构和链式存储结构的优缺点 ① 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一):要求内存中可用存储单元的地址必须是连续的. 优点:存储密度大(=1),存储空间利用率高.缺点:插入或删除元素时不方便. ②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 优点:插入或删除元素时很方便,使用灵活.缺点:存储密度小(<1),存储空间利用率低.

python数据结构与算法 36 树的基本概念

树 学习目标 理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列 树的例子 前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树.树在计算机科学中应用广泛,象操作系统.图形学.数据库系统.网络等都要用到树.树和他们在自然界中的表哥--植物树--非常相似,树也有根,有分枝,有叶子.不同之处是,数据结构的树,根在顶上,而叶子在底部. 在开始学习之前,我们来研究几个普通的例子.第一个是生物学上的分级树.图

数据结构与算法复习(一) 排序算法(I)

这篇文章将会介绍最常见的排序算法(使用 JavaScript 语言实现) PS:这里我会尽量使用语言无关的语法去写,大家不要太在意语言,重要的是算法的实现思路 1.冒泡排序 将数组分为有序区(左边)和无序区(右边) 每次从无序区的最后一个元素开始,一直向前冒泡到无序区的第一个位置,使其变成有序 function swap(A, i, j) { if (i === j) return [A[i], A[j]] = [A[j], A[i]] } function bubbleSort(A) { fo

数据结构(三)——基于顺序存储结构的线性表

数据结构(三)--基于顺序存储结构的线性表 一.基于顺序存储结构的线性表实现 1.顺序存储的定义 线性表的顺序存储结构是用一段地址连续的存储单元依次存储线性表中的数据元素. 2.顺序存储结构的操作 使用一维数组实现顺序存储结构. template <typename T> class SeqList:public List<T> { protected: T* m_array;//顺序存储空间 int m_length;//当前线性表的长度 }; 一维顺序存储结构可以是原生数组或是

数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串

Java面试宝典之数据结构基础 —— 线性表篇 一.数据结构概念 用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已.比 如我们最常用的数组,就是一种数据结构,有独特的承载数据的方式,按顺序排列,其特点就是你可以根据下标快速查找元素,但是因为在数组中插入和删除元素会 有其它元素较大幅度的便宜,所以会带来较多的消耗,所以因为这种特点,使得数组适合:查询比较频繁,增.删比较少的情况,这就是数据结构的概念.数据结构 包括

Java数据结构与算法(第一章综述)

数据结构和算法能起到什么作用? 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.数据结果包括数组.链表.栈.二叉树.哈希表等等.算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项或对数据进行排序. 可用于下面三类情况: 现实数据存储 程序员的工具 建模 数据结构的特性: 数据结构 优点 缺点 数组 插入快,如果知道下标,可以非常快地存取 查找慢,删除慢,大小固定 有序数组 比无序的数组查找快 删除和插入慢,大小固定 栈 提供后进先出的方式存取 存取其他项很慢 队列 提供先

数据结构与算法复习

数据结构回顾与整理 复习资料<数据结构与算法 Javascript描述> 人民邮电出版社 数据结构与算法学的次数再多也不为过. 1,数组array:一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,来计算元素之间存储位置的偏移量. 除了常用的方法,ES5中新增加了几个迭代方法,forEach(),every()some(),reduce(),map(),filter(). 2.列表list:是一组有序数据.其中的数据项被称为 元素.包含属性/方法有listsize,pos(当

数据结构与算法系列研究四——数组和广义表

稀疏矩阵的十字链表实现和转置 一.数组和广义表的定义 数组的定义1:一个 N 维数组是受 N 组线性关系约束的线性表.           二维数组的逻辑结构可形式地描述为:           2_ARRAY(D,R)              其中 D={aij} | i=0,1,...,b1-1; j=0,1,...,b2-1;aij∈D0}              R={Row,Col}              Row={<aij,ai,j+1>|0<=i<=b1-1;