第一章 绪论

第一章 绪论

1.1代码要规范

1.1.1 包含 n 个元素的数组 R ,向左移动 p 请用代码描述

思路:将 R 中前 p 个元素逆序,剩下的元素也逆序,最后数组整体逆序

code

//数组逆序,实际操作
void reverse(int R[],int l,int r){
    for(int i=l,j=r;i<j;i++,j--){
        int tmp = R[i];
        R[i] = R[j];
        R[j] = tmp;
    }
}

//先部分逆序,最后全部逆序
void PCR(int R[],int n,int p){
    if(p<=0||p>=n) return 0;
    else{
        reverse(R,0,p-1);
        reverse(R,p,n-1);
        reverse(R,0,n-1);
    }
}

1.1.2 C&C++ 语言基础

  1. 数据类型

(1)基本数据类型:int char float long 等
(2)结构型-用户自己组装的数据类型

  • 数组
    int a[100] ; 名字a,100个int型的变量连续的摆在一起,其中各个变量之间的位置通过下标来反映
  • 结构体
    typedef struct{
    int a;
    char b;
    float c;
    }TypeA;
    这是一个新的数据类型,TypeA型。

(3)指针类型

对于别的类型的变量,变量中所装的数据元素的内容,而指针变量内部装的是变量的地址,通过这个地址就可以找出变量在内存中的位置。
int b=10;
int *a;
a=&b; //将b的地址存在a中
int x=*a; //*a取变量b的内容

(4)节点的构造链表

  • 链表结点的定义
    typedef struct Node{
    int data ; //数据域
    struct Node * next ; //指针域,指向一个和自己相同的类型的指针变量
    }Node;

  • 二叉树结点的定义
    在链表结点结构型的基础上,再加一个指向自己同一类型变量的指针域,即为二叉树结点的结构型。

    typedef struct BTNode{
        int data ;
        struct BTNode *lchild;
        struct BTNode *rchild;
    }BTNode;
  • 二叉树结点的制作,
    BTNode BT;
    BT=(BTNode *)malloc(sizeof(BTNode)); //这种是一次申请 1 个结点。
    BT=(BTNode *)malloc(n*sizeof(BTNode)); //这种的是动态的一次申请了 n 个结点。

(5)关于typedef和#define

  • typedef 给现有的数据类型起一个新的名字
  • define 可以定义一些常量

2.函数

int a;

  • void f(int x){++x;}
    f(a);这样不能改变 a 的值,因为这样传入之后只是拷贝了一份,不会实质上改变 a 值。
  • void f(int &x){++x;}
    f(a);这样是可以改变的,因为是把 a 的地址传入了,这是引用型。
  • 如果传入的是指针型变量,并且要在传入后对指针进行改变,需按如下写
    void f(int *&x){++x;}

1.2 算法时间复杂度和空间复杂度分析

O(1)<< O(log_2(n))<< O(nlog_2(n))<< O(n^2)<< O(n^3)<< …<< O(n^k)<< O(2^n)

1.3 数据结构和算法的基本概念

1.3.1 基本概念

  1. 数据:对客观事物的符号表示。
  2. 数据元素:是数据的基本单位,一个数据元素可由若干的数据项组成。eg, 一本书的书目信息的每一项由书名、作者组成。
  3. 数据项:是数据结构中讨论的最小单位。
  4. 数据对象:性质相同的数据元素的集合,是数据的一个子集。eg, 大写字母就是一个数据对象。
  5. 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三方面的内容:逻辑结构、存储结构和对数据的运算或操作。
  6. 数据逻辑结构:是指对数据之间关系的描述,与数据怎么样存储的没有关系,同一种逻辑结构可以有多种存储结构

    • 线性结构:数据元素的有序集合
      (1)必存在唯一一个第一个元素
      (2)必存在唯一一个最后一个元素
      (3)除最后一个元素外,其他数据元素均存在唯一的后继
      (4)除第一元素外,其他数据元素均存在唯一的前驱
      * 线性结构中数据元素之间存在一对一的线性关系*
    • 非线性结构
      与线性结构相比,非线性结构的结点中存在着一对多的关系,其可以细分为树形结构图形结构
  7. 数据物理结构
    数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,对应两种不同的存储结构分别是顺序存储和链式存储

    • 顺序存储
      把逻辑结构上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。在C&C++中通常使用数组来描述。
    • 链式存储
      不要求逻辑上相邻的结点在物理存储上也是相邻的,结点之间的逻辑关系由附加的指针字段来表示。在C&C++中通常使用指针类型来描述。
    • 索引存储
      在存储结点信外,还建立附加的索引表来标识结点的地址。索引项一般形式是<关键字 , 地址>。关键字标示唯一一个结点,地址作为指向结点的指针
    • 散列存储
      根据结点的关键字通过散列函数直接计算出该结点的存储地址,这种方法本质上是顺序存储的扩展方法

    8.数据类型和变量

    • 数据类型
      是一个值得集合以及定义在这个值集上的一组操作
    • 变量
      变量是用来存储值得所在处,他们有名字和数据类型。变量的数据类型决定了如何将代表这些值存储到计算机内存中。

1.3.2 算法基本概念

  1. 算法

    基本也运算

  2. 算法特性

    • 有穷性
      有限步骤内完成
    • 确定性
      每一步骤有确切的含义
    • 输入
      有0 个或多个输入,0个也就是算法本身确定了初始化条件
    • 输出
      有1个或者多个输出
    • 可行性
      算法通过已经实现的基本操作进行运算
  3. 算法设计目标

    • 正确性
    • 可读性
    • 健壮性
    • 高效率与低存储量

【参考】
天勤-数据结构高分笔记 第一章 绪论
转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值