[数据结构]【笔记】学习之路
本帖最后由 小熊孩 于 2020-9-24 21:55 编辑待标题有朝一日变为成神之路,hhhh~嗝~~
https://static.52pojie.cn/static/image/hrline/1.gif
当回首往事的时候,不因虚度年华而悔恨.
https://static.52pojie.cn/static/image/hrline/1.gif
本帖为数据结构笔记,持续更新,不再开新帖.
https://static.52pojie.cn/static/image/hrline/4.gif
时间 : 2020年9月23日
单链表的算法
1.单链表的算法
//定义节点
typedef struct LNdode
{
ElemType data; //数据域
struct LNode *next; //指向下一个节点的指针
}LinkList;
1) 才用头插法建立单链表
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;
s->next = L->next;
L->next = s;
}
}//时间复杂对为O(n) 2) 采用尾插法建立单链表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;
r->next= s;
r = s;
}
r->next = null;
}//时间复杂对为O(n)2.单链表的基本运算算法 1) 暗元素查找算法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)插入节点操作s->next = p->next;
p->next = s; 3) 删除节点操作 p->next = p->next->next;3.有序但你链表的归并算法 1) 方法一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) 方法二/*自我感觉这个地方我写的可能不对,希望大佬们帮我审阅并指正一下,谢谢哦.*/
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)
https://static.52pojie.cn/static/image/hrline/4.gif
时间:2020年9月24日双链表的算法 1.双链表节点定义//定义节点
typedef struct LNdode
{
ElemType data; //数据域
struct DLNode *prior; //指向前驱节点
struct DLNode *next; //指向下一个节点的指针
}DLinkList; 1)采用头插法建立双链表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;
s->next = L->next;
if(L->next != null)
{
L->next->prior = s;
}
L->next = s;
s->prior = L;
}
}//时间复杂对为O(n) 2)采用尾插法建立双链表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;
r->next = s;
s->prior = r;
r = s;
}
}//时间复杂对为O(n)2.双链表的基本运算算法 1)查找元素值的节点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)插入节点/*** 核心代码* s->next = p->next;* p->next->prior = s;* s->prior = p;* p->next = s;*/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)删除节点操作/**
* 核心代码
* 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;
}
}
https://static.52pojie.cn/static/image/hrline/3.gif
不知道以后这边会写啥,先圈起来留个地.
https://static.52pojie.cn/static/image/hrline/2.gif
https://static.52pojie.cn/static/image/hrline/4.gif
附件为MD格式的笔记,内容与帖子内容完全一致,跟随更新,根据需要下载.
附件为MD格式的笔记,内容与帖子内容完全一致,跟随更新,根据需要下载.
附件为MD格式的笔记,内容与帖子内容完全一致,跟随更新,根据需要下载.
现在的编程语言提供的API/BCL 已经封装了足够优秀的这类常用算法,我认为第一是要会用,灵活应用这些算法,
第二,如果能发现现有算法的不足,能优化,或是找到一个问题的最优化解决算法,也是一种很强的能力,至于从头开始学习算法,要经历很多弯路才能明白别人的算法为什么优秀,也是一种提高编程能力的体现 基础类库
BCLbasic clas library
FCLfoundation class library 学习了学习了 来自严蔚敏版《数据结构》给的源码 没毛病 找工作啥的都是手撕压力山大 最近也在学数据结构 学到了链表 一起努力呀 掉头发呀 每天学习一点点 学无止境,谢谢。
页:
[1]