小甲鱼数据结构——第一天

参考书目:附免费高清扫描版带书签《大话数据结构-第二版》

链接:https://pan.baidu.com/s/1E1_hA-hofkt7f0r61ktWXg 
提取码:cmgz 
复制这段内容后打开百度网盘手机App,操作更方便哦

视频1——数据结构和算法绪论

程序设计 = 数据结构 + 算法。简单说来数据结构就是关系,即数据元素相互之间存在的一种或多种特定关系的集合。

小甲鱼数据结构——第一天_第1张图片

视频2——谈谈算法

#include 

int main()
{
//传统迭代方法
/*    int sum = 0;
    for(int i = 0; i <= 100; i++)
    {
        sum += i;
    }
    std::cout << "sum = " << sum << "\n\n";
*/

//高斯算法
    int sum = 0;
    int n = 100;
    sum = (n + 1) * n / 2;
    std::cout << "sum = " << sum << "\n\n";

    return 0;
}

小甲鱼数据结构——第一天_第2张图片

视频3-5——时间复杂度和空间复杂度

小甲鱼数据结构——第一天_第3张图片

小甲鱼数据结构——第一天_第4张图片

对数阶举个栗子

小甲鱼数据结构——第一天_第5张图片小甲鱼数据结构——第一天_第6张图片

常见时间复杂度

小甲鱼数据结构——第一天_第7张图片

小甲鱼数据结构——第一天_第8张图片

视频6-10——线性表

小甲鱼数据结构——第一天_第9张图片

小甲鱼数据结构——第一天_第10张图片

抽象数据类型的标准格式

小甲鱼数据结构——第一天_第11张图片

线性表的抽象数据类型

小甲鱼数据结构——第一天_第12张图片

小甲鱼数据结构——第一天_第13张图片

小甲鱼数据结构——第一天_第14张图片

/**< 实现两个集合A,B的并集
    在数据结构中所写的程序是人看的,
    因此有时候在软件中有可能无法正常运行*/
//La表示集合A,Lb表示集合B
void unionL(List *La, list Lb)
{
    int La_len,Lb_len,i;

    ElemType e;
    La_len = ListLength(*La);//集合A的长度
    Lb_len = ListLength(Lb);

    for(int i = 1; i <= Lb_len; i++)
    {
        GetElem(Lb, i, &e);//将Lb中第i个元素返回给e
        if(!LocateElem(*La, e))
        {
            ListInsert(La, ++La_len, e);//在集合A中插入新的元素e
        }
    }
}

线性表的顺序存储结构

小甲鱼数据结构——第一天_第15张图片

小甲鱼数据结构——第一天_第16张图片

小甲鱼数据结构——第一天_第17张图片

地址计算方法

小甲鱼数据结构——第一天_第18张图片

小甲鱼数据结构——第一天_第19张图片

获得元素操作

小甲鱼数据结构——第一天_第20张图片

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
/**<获得元素操作实现 
    Status是函数的类型,其值是函数结果状态代码,如OK等
    初始条件:顺序线性表L已经存在,1 <= i <= Listlength(L)
    操作结果:用e返回L中第i个数据元素的值
*/

typedef int Status;
Status GetElem(SqList L, int i, ElemType *e)
{
    if((L.length == 0) || (i < 1) || (i > L.length))
        return ERROR;
    
    *e = L.data[i-1];
    return OK;
    
}

插入元素操作

小甲鱼数据结构——第一天_第21张图片

/**< 插入数据操作
    初始条件:顺序线性表L已经存在,1 <= i <= Listlength(L)
    操作结果:在L中的第i个位置之前插入新的数据元素e,L的长度+1
*/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
Status ListInsert(SqList *L, int i, ElemType e)
{
    if(L->length == MAXSIZE)//线性表已经满了
        return ERROR;
    if((i < 1)||(i > L->length))//插入的位置不在线性表范围内
        return ERROR;
    if(i <= L->length)//插入元素位置不在线性表的尾部
    {
        //将要插入位置后数据元素向后移动一位
        for(int k = L->length-1; k >= i-1; k--)
        {
            L->data[k+1] = L->data[k];
        }
    }
    //将新元素插入
    L->data[i-1] = e;//这里-1:线性表从1开始,数组从0开始。
    L->length++;

    return OK;
}

删除操作

小甲鱼数据结构——第一天_第22张图片

/**< 删除数据操作
    初始条件:顺序线性表L已经存在,1 <= i <= Listlength(L)
    操作结果:删除L的第i个数据元素,并用e返回其值,L的长度-1
*/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
Status ListDelete(SqList *L, int i, ElemType *e)
{
    if(L.length == 0)//线性表为空表
        return ERROR;
    if((i < 1)||(i > L->length))//删除的位置不在线性表范围内
        return ERROR;
    //删除第i个元素
    *e = L->data[i-1];//线性表中第i个元素是数组下表为i-1对应的元素
    if(i <= L->length)//删除元素位置不在线性表的尾部
    {
        //将要删除位置后数据元素向前移动一位
        for(int k =i;k < L->length;k++)
        {
            L->data[k-1] = L->data[k];
        }
    }

    L->length--;

    return OK;
}

小甲鱼数据结构——第一天_第23张图片

小甲鱼数据结构——第一天_第24张图片

小甲鱼数据结构——第一天_第25张图片

线性表的链式存储结构

小甲鱼数据结构——第一天_第26张图片

小甲鱼数据结构——第一天_第27张图片

单链表

小甲鱼数据结构——第一天_第28张图片

头指针和头结点区别

小甲鱼数据结构——第一天_第29张图片

小甲鱼数据结构——第一天_第30张图片

小甲鱼数据结构——第一天_第31张图片

结构指针描述单链表

小甲鱼数据结构——第一天_第32张图片

单链表读取

小甲鱼数据结构——第一天_第33张图片

小甲鱼数据结构——第一天_第34张图片

/**< C语言实现单链表读取第i个数据元素
    初始条件:顺序线性表L已经存在,1 <= i <= Listlength(L)
    操作结果:用e返回L中第i个数据元素的值
*/
typedef struct Node
{
    ElemType daTa;//数据域
    struct Node *Next;//指针域
}Node;
typedef struct Node* LinkList;
Status GetEle(LinkList L, int i, ElemType *e)
{
    int j;
    //声明一个结点p,并指向链表的第一个结点
    LinkList p;
    p = L->next;
    j = 1;
    //遍历链表
    while((p !=  NULL)&&(j < i))
    {
        p = p->next;
        ++j;
    }

    if( !p || j >i)
        return ERROR;
    //返回数据
    *e = p->data;

    return OK;
}

 

你可能感兴趣的:(数据结构和算法)