精华内容
下载资源
问答
  • 逻辑结构 线性结构:线性表,,队列 非线性结构“树,图,集合” 存储结构(物理结构) 数据运算 五个特征 算法定义 五个特性:有穷性,确定性,可行性,输入,输出 效率度量: 时间复杂度,空间复杂度 1.1...

    绪论
    数据结构(三要素)
    逻辑结构
    线性结构:线性表,栈,队列
    非线性结构“树,图,集合”
    存储结构(物理结构)
    数据的运算

    五个特征
    算法定义
    五个特性:有穷性,确定性,可行性,输入,输出
    效率的度量:
    时间复杂度,空间复杂度在这里插入图片描述

    1.1数据结构的基本概念
    1.数据
    数据是信息的载体,是描述客观事物属性的数,字符以及所有能够输入到计算机当中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
    2.数据元素
    数据元素是数据的基本单位,通常作为一个整体进行考虑和处理,一个数据元素可以由若干数据项组成,数据项是构成数据元素的不可分割的最小的单位,例如,学生记录就是一个数据元素。他是由学号,姓名,性别等数据项组成的。
    3数据对象
    数据对象是具有相同性质的数据元素的集合,是数据的一个自己,例如,整数数据对象是集合N={0,±1,+,2,…}
    4.数据类型
    数据类型是一个值的集合和定义在此集合上的一组操作的总称
    1.原子类型。其值不可再分的数据类型
    2.结构类型:其值可以再分解成为若干成分(分量)的数据类型
    3.抽象数据类型:抽象数据组织以及与之相关的操作
    5.数据结构
    护具结构是相互之间存在一种或者多种特定关系的数据元素的集合。在任何的问题昂中,数据元素都不是鼓励存在的,他们之间存在某种关系,这种数据元素相互之间关系称为结构。
    数据结构包括三方面的内容:逻辑结构,存储结构和数据的运算。

    数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。

    1。1.2数据结构的三要素
    1.数据的逻辑结构
    逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据,他和数据的存储无关,是独立于计算机的,数据的逻辑结构可以分为线性结构和非线性结构,线性表示典型的线性结构,集合,树,图示典型的非线性结构,数据的逻辑结构分类如图所示
    在这里插入图片描述
    集合:结构中的数据元素之间除了同属于一个集合以外,别无其他关系。
    线性结构:结构当中的数据元素之间只存在一对一的关系
    树形结构:结构当中的数据元素之间存在一对多的关系
    图状结构或者网状结构:结构当中的数据元素之间存在多堆垛的关系
    2.数据的存储结构
    存储结构是指数据结构在计算机当中的表示又称为映像,也称为物理结构,他包括数据元素的表示和关系的表示。数据的存储结构是用计算机语言实现的逻辑结构,他依赖于计算机语言,数据的存储结构主要有顺序村粗,链式存储,索引存储,散列存储、
    在这里插入图片描述
    1.顺序存储:把裸机上相邻的元素存储在物理位置上相邻的存储单元当中,元素之间的关系由存储单元的临界关系来体现,其优点是可以实现随机存取,每个元素占用最少的存储空间,缺点是只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
    2.链式存储:不要求裸机上相邻的元素在物理位置上也相邻,借助指示元素的存储地址来表示元素之间的逻辑关系,其优点是不会出现碎片的线性,能够充分利用所有的存储单元,缺点是每个元素因为存储指针而占用额外的存储空间,而且只能够实现顺序存取。
    3)索引存储:在存储元素信息的同事,还要建立附加的索引表,索引表当中的每项称为索引项。索引项的一般形式是(关键字,地址),其优点是检索速度快,缺点是附加的索引表额外占用存储空间。另外,增加和删除数据的时候也要修改索引表,因而会花费较多的时间
    4)散列存储:根据元素的关键词直接计算机出该元素的存储地址,又称为哈希存储(Hash。其优点是检索,增加和删除结点的操作都非常的快,缺点是如果散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间的开销。
    3.数据的运算:施加在数据上的运算包括运算的定义和实现,运算的定义是针对逻辑结构,指出运算的功能,运算的实现是针对存储结构的,指出与少奶奶的具体的操作步骤。

    对于两种不同的1,他们的逻辑结构和物理结构完全有可能相同,比如二叉树和二叉排序树,二叉排序树可以采用二叉树的逻辑表示和存储方式,前者通常用语表示层次关系,而后者通常用语排序和查找,虽然他们的与少奶奶都有建立树,插入节点,删除节点,和查找节点等操作,但是对于二叉树和二叉排序树,这些与少奶奶的定义是不同的,以查找节点为例,二叉树的时间复杂度为o(n),而二叉排序树的时间复杂度为p(log2n)

    1.2算法和算法的评价

    1.2.1算法的基本概念
    算法(Algorithm)是对特定的问题的求解步骤的一中描述,他是指令的有限序列,其中的每条指令表示一个或者多个操作,此外,一个算法还具有下列5个重要特性
    1.有穷性
    一个算法必须总在执行有穷步之后才能够结束,而且每一步都可在有穷时间内完成
    2.确定性:算法当中的每条指令必须有确切的含义,对于相同的输入只能够得出相同的输出
    3.可行性:
    算法当中描述的操作都可以通过已经实现的基本运算执行有限次来实现
    4.输入
    一个算法有零个或者多个输入,这些输入取自某个特定的对象的集合
    5.输出:一个算法有一个或者多个输出,这些输出是和输入有着某种特定的关系的量
    通常:设计一个好的算法应该来考虑达到以下的目标
    1.正确性
    算法应该能够正确的解决求解问题
    2.可读性
    算法应该具有良好的可读性,来帮助人们理解
    3.健壮性
    输入非法的数据的时候,算法能够适当的做出反应或者进行处理,而不会产生莫名其妙的输出结果
    4.效率与低存储量的需求:
    效率是指算法的执行的时间,存储量需求是指算法执行过程当中所需要的最大的存储空间,这两者都和问题的规模有关。
    1.2.2算法效率的度量
    算法效率的度量是通过时间复杂度和空间复杂度来描述的。
    1.时间复杂度
    一个语句的频度是指该语句在算法当中被重复执行的次数,算法当中所有的语句的频度之和记为T(n),他是该算法的问题规模n的函数,时间复杂度主要分析T(n)的数量级,算法当中的基本运算(最深层循环内的语句)的频度与T(n)同数量级,因此通常采用算法当中的基本运算的频度f(n)来分析算法的时间复杂度,因此算法大的时间复杂度记为
    T(n)=o(f(n))
    在这里插入图片描述
    算法恶时间复杂度不仅依赖于问题的规模n,也取决于等待输入的数据的性质(比如输入数据元素的初始状态),例如,在数组A[0…n-1]当中,查找给定值k的算法大致如下:

    i=n-1;
    while(i>=0&&(A[i]!=k))
    i--;
    return i;
    

    该算法当中的语句3(基本运算)的频度不仅与问题的规模n有关,而且与输入实例当中的A的各个元素的取值以及k的取值有关
    1.如果A当中没有与k相等元素,则语句3的频度f(n)=n;
    如果A的最后一个元素等于k,则语句3的频度f(n)是常数0
    最坏的时间复杂度是指在最坏的情况下,算法的时间复杂度
    平均时间复杂度:是指所有可能输入实例在等概率的出现的情况下,算法的期望运行的时间
    最好的时间复杂度:是指在最好的情况下,算法的时间复杂福。
    在这里插入图片描述
    2.空间复杂度
    算法的空间度S(n)定义为该算法所耗费的存储空间,他是问题规模n1的函数,记为S(n)=o(g(n))
    一个程序在执行的时候除了需要存储空间来存放本身所用的指令,常数,变量和输入的数据意外,还需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间,如果输入的数据所占的空间只是取决于问题的本身和算法无关,则只需要分析除了输入和程序之外的额外恶空间
    算法的原地工作是指算法所需要的辅助的空间为常量即o(1)

    展开全文
  • 掌握栈的逻辑特征 . 掌握栈顺序存储结构的特点,熟练掌握顺序栈的基本运算 . 熟练掌握栈的链式存储结构定义及基本操作 . 加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力 ...

    《数据结构与算法设计》实验报告书之栈的存储结构定义及基本操作

    实验项目
    栈的存储结构定义及基本操作
    实验目的
    . 掌握栈的逻辑特征
    . 掌握栈顺序存储结构的特点,熟练掌握顺序栈的基本运算
    . 熟练掌握栈的链式存储结构定义及基本操作
    . 加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力
    实验内容
    (一)基本实验内容:
    1)问题描述:
    假设以键盘输入的方式输入一个正整数序列:比如x1, x2, x3,…,xn,要求算法实现:当ai≠0时,将ai进栈;当ai=0时,输出栈顶元素并出栈。用栈结构存储所输入的整数序列,并且要求算法的健壮性及能够应对异常情况(如果是顺序要判断栈满栈空,如果是链式栈要判断栈空等)并给出相应的提示系统信息。
    试编程实现该程序。
    ① 输入的形式和输入值的范围:需要用户以键盘输入的方式输入一个正整数序列
    ② 输出的形式:通过运行程序后将最后的正整数序列输出。
    ③ 程序所能达到的功能:通过对栈的使用完成对正整数序列输出
    ④ 测试数据:13个元素 1203405607809
    输出为:13579
    (二)实现要求:

    1. 编写函数,实现栈的初始化、入栈、出栈、判断栈空操作。不限顺序栈或者链栈
    2. 编写函数,实现正整数序列输出的操作。
    3. 编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
      请遵循“清晰第一,效率第二”的良好编程风格,给与必要的注释说明。

    算法设计分析

    (一)数据结构的定义
    顺序栈,即栈的顺序存储结构,是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序 栈中的位置。为了能实现实验内容的要求,所以先实现栈的初始化、入栈、出栈、判断栈空操作,并且要求算法的健壮性。在后面使用行编辑函数的时候便于调用,以便更好地实现行编辑的功能。
    顺序表存储结构定义为:
    /定义顺序栈/
    #define maxsize 50
    typedef struct
    {
    int stack[maxsize];
    int top;
    } seqlist;
    (二)总体设计
    实验总共包括九个函数:主函数,初始化顺序栈函数,顺序栈栈长函数,入栈函数,打印顺序栈函数,出栈函数,逆序输出函数,行编辑1.0函数(实验要求),行编辑2.0函数(附加题要求)。
    主函数:统筹调用各个函数以实现相应功能
    Int main()
    初始化顺序栈函数:将顺序栈的top初始化为-1
    Void seqinit ()
    顺序栈栈长函数:返回顺序栈的长度
    Int listlength()
    入栈函数:将输入的数据传入顺序栈中
    Void seqbulid()
    打印顺序栈函数:将顺序栈数据打印出来
    Void seqprinter ()
    出栈函数:实现顺序栈种单个元素的弹出
    Void seqdelete ()
    逆序打印函数:实现顺序栈的逆序打印
    void seqsetter()
    行编辑1.0函数(实验要求)
    int seqlocate1()
    行编辑2.0函数(附加题要求)
    int seqlocate2()
    (三)各函数的详细设计:
    主函数main()
    主要就是进行功能的实现。

    初始化顺序栈函数seqinit ()
    简单的对顺序栈的top进行初始化为-1,不然程序会报错。

    顺序栈栈长函数listlength()
    直接返回顺序栈的长度l->top+1。

    顺序栈入栈函数seqbulid()
    实行顺序栈的创建,把输入的数据一个一个存进开辟好空间的顺序栈中,并且顺序栈的top进行加加。

    打印顺序栈函数seqprinter ()
    就是直接将顺序栈打印出来,不过要注意换行

    打印顺序栈函数seqsetter()
    就是直接将顺序栈逆序的打印出来,不过要注意换行

    顺序栈出栈函数seqdelete ()
    元素的出栈,因为是栈,遵循着先进后出的原则,所以栈的出栈就显得比较简单了,直接把最后一个元素弹出即可,先用一个变量保留弹出的元素,之后top–,把弹出的元素return就好了。

    行编辑1.0函数(实验要求)
    实现以键盘输入的方式输入一个正整数序列:比如x1, x2, x3,…,xn,要求算法实现:当ai≠0时,将ai进栈;当ai=0时,输出栈顶元素并出栈。用栈结构存储所输入的整数序列,并且要求算法的健壮性及能够应对异常情况(如果是顺序要判断栈满栈空,如果是链式栈要判断栈空等)并给出相应的提示系统信息。

    行编辑2.0函数(附加题要求)
    实现以键盘输入的方式输入一个正整数序列:比如x1, x2, x3,…,xn,要求算法实现:当ai≠0时,将ai进栈;当ai=0时,前一个数字加1。用栈结构存储所输入的整数序列,并且要求算法的健壮性及能够应对异常情况(如果是顺序要判断栈满栈空,如果是链式栈要判断栈空等)并给出相应的提示系统信息。
    实验测试结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    实验总结:(100字到200字)
    此部分附上主要程序代码和相关的注释说明、调试数据及过程、问题及解决办法。 (最重要)
    (1)调试过程中主要遇到哪些问题?是如何解决的?
    答:其实顺序栈的难度不大,遇见的问题只有一个,就是打印,因为打印是用while(l->top>=0)实现,里面的l->top–导致栈里面的数全部弹出,导致后面的实验无法进行,所以,转变一种方法,用for或者用一个变量来代替l->top使之减减,这样问题就解决了。
    (2)经验和体会
    答:还是那句老话,多敲代码自己练习,有时间把链式栈写一遍,增加自己对栈的理解能力。
    附录 实验程序代码(该部分请加注释)
    /SeqList.h函数代码/

    //#ifndef SEQLIST_H_INCLUDED
    //#define SEQLIST_H_INCLUDED
    
    /*定义顺序栈*/
    #define maxsize 50
    typedef struct
    {
        int stack[maxsize];
        int top;//定义顺序栈的栈顶
    } seqlist;
    
    /*初始化顺序栈*/
    void seqinit(seqlist *l)
    {
        l->top=-1;//初始化栈顶为-1
    }
    
    /*顺序栈栈长函数listlength()*/
    int listlength(seqlist *l)
    {
        return l->top+1;//返回顺序栈的长度
    }
    
    /*入栈函数seqbulid()*/
    int seqbulid(seqlist *l,int x)
    {
    	l->top++;
    	if(l->top >= maxsize){//判断栈是否已满
            std::cout<<"该顺序栈已满!!"<<std::endl;
            return 0;
    	}
        l->stack[l->top]=x;
        return 1;
    }
    
    /*打印顺序栈函数seqprinter ()*/
    void seqprinter(seqlist *l)
    {
        if(l->top < 0){//判断栈是否为空
            std::cout<<"该栈为空"<<std::endl;
            return ;
        }
    	for(int i=0;i<=l->top;i++)
        {
            std::cout<<"  "<<l->stack[i];
        }
        std::cout<<"\n";
    }
    
    /*出栈函数seqdelete ()*/
    int seqdelete(seqlist *l)
    {
    	int x;
    	x = l->stack[l->top];//保留被弹出的元素
        l->top--;
        return x;
    }
    
    /*逆序输出*/
    void seqsetter(seqlist *l)
    {
    if(l->top < 0){//判断栈是否为空
            std::cout<<"该栈为空"<<std::endl;
            return ;
        }
    	for(int i=l->top;i>=0;i--)
        {
            std::cout<<"  "<<l->stack[i];
        }
        std::cout<<"\n";
    }
    
    /*行编辑函数1.0版本seqlocate ()*/
    int seqlocate1(seqlist *l)
    {
    	l->top=-1;//清空之前的顺序栈
    	std::cout<<"请输入行编辑之前的数据:"<<std::endl;
    	int x;
    	while(std::cin>>x && x >=0)
    	{
    		if(x == 0){//判断该元素是否为零,如为零,则将之前的数弹出
    			seqdelete(l);
    		}else{
    			seqbulid(l,x);
    		}
    	}
    	std::cout<<"行编辑之后的数据:"<<std::endl;
    	seqprinter(l);
    	return 1;
    }
    
    /*行编辑函数2.0版本seqlocate ()*/
    int seqlocate2(seqlist *l)
    {
    	l->top=-1;
    	std::cout<<"请输入行编辑之前的数据:"<<std::endl;
    	int x;
    	while(std::cin>>x && x >=0)
    	{
    		if(x == 0){//判断该元素是否为零,如为零,则将之前的数+1
    			l->stack[l->top]++;
    		}else{
    			seqbulid(l,x);
    		}
    	}
    	std::cout<<"行编辑之后的数据:"<<std::endl;
    	seqprinter(l);
    	return 1;
    }
    
    //#endif // SEQLIST_H_INCLUDED
    

    /主函数代码/

    #include <iostream>
    #include "SeqList.h"
    #include "menu.h"
    using namespace std;
    int main(){
        void operation();
        operation();
        return 0;
    }
    void operation(){
        seqlist *l = new seqlist;//申请内存空间
        seqinit(l);//顺序表的初始化
        for(;;){
            char n;
            int x;
            menu();
            cin>>n;
            switch (n){
            case 'a':
                seqinit(l);//顺序表的初始化
                cout<<"请输入数据:\n";
                while(cin>>x && x>=0){
                    seqbulid(l,x);//入栈
                }
                break;
            case 'b':
                cout<<"出栈的数据为:"<<seqdelete(l);//出栈
                break;
            case 'c':
                cout<<"打印的顺序栈为:\n";
                seqprinter(l);
                break;
            case 'd':
                cout<<"顺序表逆序之后:\n";
                seqsetter(l);
                break;
            case 'e':
    			seqlocate1(l);
                break;
            case 'f':
                cout<<"该顺序栈的栈长为:"<<listlength(l)<<"\n";
                break;
    		case 'g':
                seqlocate2(l);
                break;
            case 'h':
                cout<<"本次服务到结束,下次再见!!"<<endl;
                return ;
            default:
                cout<<"输入的字符有问题,请重新输入!!";
                break;
            }
        }
    }
    

    /menu.h菜单函数代码/

    #ifndef MENU_H_INCLUDED
    #define MENU_H_INCLUDED
    
    void menu(){
        std::cout<<"\n";
        std::cout<<" **********************顺序栈的应用**********************\n";
        std::cout<<" *                                                      *\n";
        std::cout<<" *     a:入栈                b:出栈                     *\n";
        std::cout<<" *     c:顺序打印栈          d:逆序打印栈               *\n";
        std::cout<<" *     e:行编辑1.0版本       f:打印顺序栈的长度         *\n";
    	std::cout<<" *     g:行编辑2.0版本       h:退出程序                 *\n";
        std::cout<<" *                                                      *\n";
        std::cout<<" ********************************************************\n";
    }
    
    #endif // MENU_H_INCLUDED
    
    展开全文
  • 说到线性结构,得先了解一下数据的逻辑结构,数据的逻辑结构分为线性结构、集合结构、树形结构和图形结构,如下图所示,栈是一种特殊的线性表,是线性结构的一种。 数据的逻辑结构 二、栈的属性和方法 以上便是...

    一、栈的定义

    栈是一种线性数据结构,栈的特征是数据的插入和删除只能通过一端来实现,这一端称为“栈顶”,相应的另一端称为“栈底”。说到线性结构,得先了解一下数据的逻辑结构,数据的逻辑结构分为线性结构、集合结构、树形结构和图形结构,如下图所示,栈是一种特殊的线性表,是线性结构的一种。

    数据的逻辑结构

    二、栈的属性和方法

    以上便是栈的一些方法,经常用到的是Push()和Pop()方法。

    三、栈的应用

    栈最经典的应用是表达式求值,通过以下例子的描述来理解栈在表达式求值应用中的过程。

    如求表达式:23-12/(2+4)+11的值。

    可将上述表达式转换为后缀的形式,这样可以减少把“(”“)”压入、弹出栈的过程,更好理解操作,如不理解怎样前缀变后缀,可以翻翻树的知识。

    23-12/(2+4)+11变为后缀形式为:“23 12 2 4 + / -11+”,把所有的数字压入栈,每次遇到符号时则弹出左右操作数,进行一次运算,然后循环这个过程。栈的应用过程如下:

    从以上例子可知,栈在表达式求值方面的应用是多么方便、高效率,当然栈在逆序、数制转换等方面也有所应用。

    以上便是数据结构栈的相关介绍,相信通过上面的介绍,大家应该都能理解栈的这种数据结构定义和应用,这也只是栈的简单介绍,对栈的更多操作和应用还需大家更深入去学习,也欢迎大家在评论中指出。

    展开全文
  • 逻辑结构与存储结构

    2018-04-11 23:42:01
    常见的逻辑结构有:线性结构,非线性结构(集合结构,树状结构,网络结构)。(1) 线性结构 :数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。eg:线性表,,队列,双队列,数组...
    逻辑上的数据结构反映成分数据之间的逻辑关系即逻辑结构 ,而物理上的数据结构反映成分数据在计算机内部的存储安排即存储结构 。
    常见的逻辑结构有:线性结构,非线性结构(集合结构,树状结构,网络结构)。
    (1) 线性结构 :数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。eg:线性表,栈,队列,双队列,数组,串。
    (2) 非线性结构:逻辑特征是一个节点元素可能对应多个直接前驱和多个直接后继。eg: 二维数组,多维数组,广义表,树(二叉树等),图。

    常见的存储结构有: 顺序存储 , 链式存储 , 索引存储 ,散列存储 。

    (1)顺序存储结构:逻辑上相邻的节点存储在物理位置上相邻的存储单元中。

    (2)链式存储结构:逻辑上相邻、物理上不连续;

    (3)索引存储结构:除建立存储节点信息外,还建立附加的索引表来标识节点的地址。

    (4)散列存储结构:根据节点的关键字直接计算出该节点的存储地址。eg:哈希表。

      链式存储结构的特点:

               a. 比顺序存储结构的存储密度小 (每个节点都由数据域和指针域组成,所以相同空间内顺序比链式存储更多)。

        b. 逻辑上相邻的节点物理上不必相邻。

        c. 插入、删除灵活 (不必移动节点,只要改变节点中的指针)。

        d. 查找结点时链式存储要比顺序存储慢。   

        e. 每个节点是由数据域和指针域组成。

    存储结构是数据的逻辑结构用计算机语言的实现,常见的存储结构有:顺序存储链式存储索引存储,以及散列存储 。其中散列所形成的存储结构叫 散列表(又叫哈希表),因此哈希表也是一种存储结构。栈只是一种抽象数据类型,是一种逻辑结构,栈逻辑结构对应的顺序存储结构为顺序栈,对应的链式存储结构为链栈,循环队列是顺序存储结构,链表是线性表的链式存储结构。



    展开全文
  • 数据结构之栈定义及构造函数 栈的定义 栈是一种线性数据结构,栈的特征是数据的插入和...说到线性结构,得先了解一下数据的逻辑结构,数据的逻辑结构分为线性结构、集合结构、树形结构和图形结构,如下图所示,...
  • 从数据的逻辑角度看,和队列是线性表;从操作的角度来看,和队列的基本操作是线性表基本操作的子集,是操作受限制的线性表。 不同点:是限定仅在表尾进行插入删除的线性表,它的存其特征是后进先出;队列是...
  • 数据结构(java)之

    2019-10-06 19:46:08
    1. 栈的逻辑结构 a) 定义:只允许在表的一端进行插入和删除操作的线性表,只允许操作的一段称为栈顶,另一端称为栈尾 b) 特征:先进后出 c) 抽象数据类型 i. 数据元素:任意属于同一类的数据元素 i....
  • 2.1 栈的逻辑结构 栈是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端成为栈顶,另一端称为栈低,不含任何数据元素的栈称为空栈。 栈中的元素具有后进先出的特征,即最后入栈者最先出栈 2.2 栈的...
  • 3.4 递归与递归函数 3.4.1 定义 逻辑特征 后进先出(LIFO) 3.4.2 与递归实现 递归定义 递归(recursion)直接或间接地调用自身. 递归规则 递归终止条件 如: n! = (n-1! *n 0! = 1 递推从已知初始条件出 发...
  • 逻辑结构!不是真是存在!寄托载体不固定! 和队列的特征:先进后出,队列:先进先出 int、double……是数据类型 array、list、map都有各自固定格式和样式 而和队列可以是一个线性表、可以是一个数组...
  • 线性逻辑结构特征: 集合中存在唯一第一个数据元素、最后一个数据元素,集合中剩余每个数据元素均有唯一直接前驱元素和唯一直接后继元素 线性表物理实现 数组: 它用一组连续内存空间,来存储一组具有...
  • 初步了解

    2019-04-10 18:32:02
    栈的概念及其特征 ** 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作一端的称为栈顶,另一端称为栈低。栈中的数据元素遵守后进先出的原则。 压栈:栈的插入操作叫做...
  • python实现

    2020-03-04 21:12:20
    栈的特征是先进后出。栈在生活中的例子有很多,比如网页历史记录,最后搜索的排在最前面。python实现栈这种数据结构非常容易。 实现代码如下: class Stack(object): # 初始化 def __init__(self,limit): ...
  • 数据结构的逻辑结构和物理结构 逻辑结构:数据元素之间的逻辑关系 线性结构和非线性结构 线性数据结构:一个有序数据元素的集合,数据元素之间的关系是一对一的关系 除了第一个和最后一个数据元素之外,其它数据...
  • 相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。 如树,表,多维数组等 广义表是非线性结构的,它也是线性表的一种推广。 二叉树是树状结构。 稀疏矩阵常用来存储图。 ...
  • 说到线性结构,得先了解一下数据的逻辑结构,数据的逻辑结构分为线性结构、集合结构、树形结构和图形结构,如下图所示,是一种特殊的线性表,是线性结构的一种。 JavaScript => 数据结构之队列结构的构造函.....
  • 数据结构

    2021-05-11 17:26:17
    目录数据结构第一章:数据结构的定义逻辑结构物理结构算法的五个特征算法的复杂度概要: 复杂度计算为重点第二章:线性表线性表的逻辑结构线性表的顺序存储结构顺序表的操作线性表的链式存储结构单链表的操作双链表...
  • 8.1.1 图的逻辑结构定义1248.1.2 图的基本术语124 8.2 图的储存126 8.2.1 邻接矩阵存储126 8.2.2 邻接表存储128 8.3 图的遍历129 8.3.1 深度优先搜索遍历129 8.3.2 广度优先搜索遍历131 8.3.3 上机体验132 8.4 图...
  • 线性结构是一个有序数据元素的集合。...数据结构课程中数据的逻辑结构分为线性结构和非线性结构。 对于数据结构课程而言,简单地说,线性结构是n个数据元素的有序(次序)集合。 特征 1.集合中必...
  • 经典数据结构C++版

    热门讨论 2010-12-22 14:52:35
    到第8 章,介绍了多维数据、广义表、树、二叉树、图等非线性结构的逻辑特征,在计算 机中的存储表示及一些常用算法实现及基本应用;第9章到第10章,介绍了在计算机中使 用非常广泛的两种运算:排序和查找,对一些...
  • 数据结构之线性结构

    2019-09-03 23:12:36
    数据结构中数据的逻辑结构分为线性结构和非线性结构. 线性结构就是n个数据元素的有序(次序)集合. 线性结构特征: 1)只有一个首结点 2)只有一个尾结点 3)除首尾结点外, 其它结点称为内部结点 4)首结点只有后继...
  • 非常棒数据结构与算法视频

    千次阅读 2010-02-07 21:17:00
    第1章 概论——1(概念、逻辑结构、存储) 下载rm pdf 第二讲 第1章 概论——2(存储结构,ADT,算法特征,算法量度) 下载rm     第三讲 第2章 线性表、和队列——1(线性表ADT和存储结构) 下载rm pdf ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 242
精华内容 96
关键字:

栈的逻辑结构特征