吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2321|回复: 9
收起左侧

[其他转载] [数据结构]【笔记】学习之路

[复制链接]
小熊孩 发表于 2020-9-23 23:50
本帖最后由 小熊孩 于 2020-9-24 21:55 编辑

待标题有朝一日变为成神之路,hhhh~嗝~~


当回首往事的时候,不因虚度年华而悔恨.



   本帖为数据结构笔记,持续更新,不再开新帖.



时间 : 2020年9月23日

单链表的算法
1.单链表的算法
[C++] 纯文本查看 复制代码
//定义节点
typedef struct LNdode
{
        ElemType data; //数据域
        struct LNode *next; //指向下一个节点的指针
}LinkList;

  1) 才用头插法建立单链表
   
[C++] 纯文本查看 复制代码
void CreateListF(LinkList *&L, ElemType a[], int n){
    LinkList *s; int i;
    L = (LinkList *)malloc(sizeof(LinkList));
    L->next = null;
    for(i=0; i<n; i++)
    {
        s = (LinkList *)malloc(sizeof(LinkList));
        s->data = a[i];
        s->next = L->next;
        L->next = s;
    }
}//时间复杂对为O(n)
2) 采用尾插法建立单链表
[C++] 纯文本查看 复制代码
void CreateListF(LinkList *&L, ElemType a[], int n)
{
    LinkList *s, *r; int i;
    L = (LinkList *)malloc(sizeof(LinkList));
           r = L;
    for(i=0; i<n; i++)
    {
        s = (LinkList *)malloc(sizeof(LinkList));
        s->data = a[i];
        r->next= s;
        r = s;
    }
    r->next = null;
}//时间复杂对为O(n)
2.单链表的基本运算算法
1) 暗元素查找算法
[C++] 纯文本查看 复制代码
int LocateElem(LinkList *L, ElemType e)
{
    LinkList *p = L->next;
    int n = 1;
    while(p!=null && p->data !=e)
    {
        p = p->next;
        n++;
    }
    if(p==null)
        return 0;
    else
        return n;
}
2)插入节点操作
[C++] 纯文本查看 复制代码
s->next = p->next;
p->next = s;
3) 删除节点操作
[C++] 纯文本查看 复制代码
p->next = p->next->next;
3.有序但你链表的归并算法
1) 方法一
[C++] 纯文本查看 复制代码
void Merge(LinkList *L1, LinkList *L2, LinkList *&L3)
{
    LinkList *p = L1->next, *q = L2->next, *r, *s;
    L3 = (LinkList *)malloc(sizeof(LinkList));
    while(p!=null && q!null)
    {
        if(p->data < q->data)
        {
            s = (LinkList *)malloc(sizeof(LinkList));
            s->data = p->data;
            p = p->next;
            r->next = s;
            r = s;
        }
        else
        {
            s = (LinkList *)malloc(sizeof(LinkList));
            s->data = q->data;
            q = q->next;
            r->next = s;
            r = s;
        }
    }
    if(q != null)
        p = q;
    while(p != null)
    {
        s = (LinkList *)malloc(sizeof(LinkList));
            s->data = p->data;
            p = p->next;
            r->next = s;
            r = s;
    }
    r->next = null;
}//时间复杂度/空间复杂度 O(m+n)
2) 方法二
[C++] 纯文本查看 复制代码
/*自我感觉这个地方我写的可能不对,希望大佬们帮我审阅并指正一下,谢谢哦.*/
void Merge(LinkList *L1, LinkList *L2, LinkList *&L3)
{
     LinkList *p = L1->next, *q = L2->next, *r;
    L3 = L1;
    free(L2);
    r = L3;
    while(p!=null && q!null)
    {
        if(p->data < q->data)
        {
            r->next = p;
            p = p->next;
        }
        else
        {
            r->next = q->next;
            q = q->next;
        }
        r = r->next;
    }
    if(q != null)
            p =q;
    r->next = null;
}//时间复杂度O(m+n) 空间复杂度O(1)


时间:2020年9月24日
双链表的算法
1.双链表节点定义
[C] 纯文本查看 复制代码
//定义节点
typedef struct LNdode
{
	ElemType data; //数据域
	struct DLNode *prior; //指向前驱节点
	struct DLNode *next; //指向下一个节点的指针
}DLinkList;
1)采用头插法建立双链表
[C] 纯文本查看 复制代码
void CreateDListF(LinkList *&L, ElemType a[], int n)
{
    DLinkList *s; int i;
    L = (DLinkList *)malloc(sizeof(DLinkList));
    L->next = L->prior = null;
    for(i=0; i<n; i++)
    {
        s = (DLinkList *)malloc(sizeof(DLinkList));
        s->data = a[i];
        s->next = L->next;
        if(L->next != null)
        {
            L->next->prior = s;
        }
        L->next = s;
        s->prior = L;
    }
}//时间复杂对为O(n)
2)采用尾插法建立双链表
[C] 纯文本查看 复制代码
void CreateDListR(LinkList *&L, ElemType a[], int n)
{
    DLinkList *s, *r; int i;
    L = (DLinkList *)malloc(sizeof(DLinkList));
    r = L;
    for(i=0; i<n; i++)
    {
        s = (DLinkList *)malloc(sizeof(DLinkList));
        s->data = a[i];
        r->next = s;
        s->prior = r;
        r = s;
    }
}//时间复杂对为O(n)
2.双链表的基本运算算法
1)查找元素值的节点
[C] 纯文本查看 复制代码
int Finfnode(DLinkList *L, ElemType e)
{
    DLinkList *p = L->next;
    int n = 1;
    while(p!=null && p->data !=e)
    {
        p = p->next;
        n++;
    }
    if(p==null)
        return 0;
    else
        return n;
}//时间复杂对为O(n)
2)插入节点
[C] 纯文本查看 复制代码
/**[align=left]* 核心代码[/align][align=left]* s->next = p->next;[/align][align=left]* p->next->prior = s;[/align][align=left]* s->prior = p;[/align][align=left]* p->next = s;[/align][align=left]*/[/align]int ListInsert(DLinkList *&L, int i, ElemType e)
{
    int j = 0;
    DLinkList *p = L, *s;
    while(j<i-1 && p!=null)
    {
        p = p->next;
        j++;
    }
    if(p == null)
    {
        return 0;
    }
    else
    {
        s = (DLinkList *)malloc(sizeof(DLinkList));
        s->data = e;
        s->next = p->next;
        if(p->next != null)
        {
            p->next->prior = s;
        }
        s->prior = p;
        p->next = s;
        return 1;
    }
}
3)删除节点操作
[C] 纯文本查看 复制代码
/**
* 核心代码
* p->next = q->next;
* q->next->prior = p;
*/
int ListDelete(DLinkList *&L, int i, ElemType &e)
{
    int j = 0;
    DLinkList *p = L, *q;
    while(j<i-1 && p!=null)
    {
        p = p->next;
        j++;
    }
    if(p == null)
    {
        return 0;
    }
    else
    {
       q = p->next;
       if(q==null)
       {
           renturn 0;
       }
        p->next = q->next;
        if(p->next != null)
        {
            p-next->prior = p;
        }
        free(q);
        return 1;
    }
}


不知道以后这边会写啥,先圈起来留个地.







附件为MD格式的笔记,内容与帖子内容完全一致,跟随更新,根据需要下载.

附件为MD格式的笔记,内容与帖子内容完全一致,跟随更新,根据需要下载.

附件为MD格式的笔记,内容与帖子内容完全一致,跟随更新,根据需要下载.
数据结构笔记.rar (5.31 KB, 下载次数: 15)



免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
王星星 + 1 + 1 谢谢@Thanks!
joneqm + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

EnterpriseSolu 发表于 2020-9-24 07:23
现在的编程语言提供的API/BCL 已经封装了足够优秀的这类常用算法,我认为第一是要会用,灵活应用这些算法,
第二,如果能发现现有算法的不足,能优化,或是找到一个问题的最优化解决算法,也是一种很强的能力,至于从头开始学习算法,要经历很多弯路才能明白别人的算法为什么优秀,也是一种提高编程能力的体现
EnterpriseSolu 发表于 2020-9-24 07:26
基础类库
BCL  basic clas library  
FCL  foundation class library  
alex1998 发表于 2020-9-24 08:32
hyh15552464072 发表于 2020-9-24 08:38
来自严蔚敏版《数据结构》给的源码
15126819695 发表于 2020-9-24 09:21
没毛病   找工作啥的都是手撕  压力山大
wu_zhi33 发表于 2020-9-24 09:38
最近也在学数据结构   学到了链表   一起努力呀
桥段 发表于 2020-9-24 09:52
掉头发呀
吾爱丶加油 发表于 2020-9-24 13:09
每天学习一点点
zjlzhok 发表于 2020-9-25 09:42
学无止境,谢谢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表