数据结构【链表】
Curiosity~
知其然,知其所以然,知其所必然
展开
-
【数据结构】(循环链表)反复找出单链表中的最小值并输出直到循环单链表为空 然后释放循环单链表的头结点
算法思想:使用双重for循环寻找最小值结点void Del_All(LinkList &d){ printf("%p\n",d); if(d==NULL) return; if(d->next==d){ free(d); return; } LinkList pre;//指向最小值的前驱结点 LinkList min;//指向最小值结点 Lin...原创 2019-08-18 16:42:19 · 2156 阅读 · 1 评论 -
【数据结构】(循环链表)判断循环双链表是否对称
算法思想: 正反向同时遍历查看节点的值是否相等,两个指针同时遍历 int Symmerty(DLinkList &d){ if(d->next==NULL) return 0; DLinkList pre=d->next; DLinkList tail=d->prior; 123456 while(pre!=tail||pre->n...原创 2019-08-18 15:25:47 · 4063 阅读 · 0 评论 -
v【数据结构】(单链表)用链表存储序列A序列B,判断B是否为序列A的子集
算法思想:实际题目为kmp算法的链表形式 本例采用暴力破解法int pattern(LinkList &A,LinkList &B){ if(A->next==NULL) return 0; if(B->next==NULL) //空集一定是子集啦 return 1; LinkList pre=A->next; LinkList pa=...原创 2019-08-18 14:41:50 · 1269 阅读 · 2 评论 -
【数据结构】(单链表)求两个链表的交集
算法思想:其实就是合并链表相同的元素(假设链表有序) void Union(LinkList &A,LinkList &B){ if(A->next==NULL||B->next==NULL) return ; LinkList pa=A->next; LinkList pb=B->next; LinkList r=A;...原创 2019-08-18 14:39:07 · 5300 阅读 · 0 评论 -
【数据结构】(单链表)找出两个链表的公共元素并 放在链表C中,要求不破坏AB链表
算法思想:寻找公共元素,即寻找两个链表中值相等的元素,默认链表有序,只需要遍历比较即可,详见代码LinkList Get_Common(LinkList A,LinkList B){ if(A->next==NULL||B->next==NULL) //链表为空返回 return NULL; LinkList C; C=(LinkList)malloc(size...原创 2019-08-18 12:23:39 · 1417 阅读 · 2 评论 -
【数据结构】(单链表)归并两个有序单链表 并逆序排列
算法思想:归并两个有序链表可以采取头插法,或者尾插法,逆序排列,就选择了尾插法,详见代码 void MargeLinkList(LinkList &q,LinkList &p){ if(q->next==NULL&&p->next==NULL) return; LinkList s1=q->next; LinkL...原创 2019-08-18 12:11:06 · 1269 阅读 · 0 评论 -
【数据结构】(单链表)单链表删除重复元素(假设链表是有序的)
**算法思想: 利用尾插法 在逻辑上将一个链表分为两个因为是有序的所以直接比较删除就好了 类似于顺序表 **void Delete_Same(LinkList &l){ if(l->next==NULL||l->next->next==NULL) //链表为空或链表中只有一个元素返回 return; LinkList r=l->n...原创 2019-08-18 12:04:16 · 770 阅读 · 2 评论 -
【数据结构】(单链表)将一个链表分为两个带头节点链表其中链表A含有原表中序号为奇数的元素 链表B含有原表中序号为偶数的元素
算法思想:这个就比较简单了就是,定义一个计数器判断当前计数器是技术还是偶数然后通过头插法,或者尾插法建立链表即可LinkList DisCreate_1(LinkList &A){ if(A->next==NULL) return NULL; int count=0; LinkList B; B=(LinkList)malloc(sizeof(LNode)); B-&...原创 2019-08-17 09:02:57 · 1890 阅读 · 0 评论 -
【数据结构】(单链表)找到两个链表的公共元素
算法思想:这个题目我没有做测试,写一下大概思路,就是让长的链表先走长的那几步,等到两个链表一般长的时候就一起走找到相同的结点//获取链表长度int getLength(LNode *p){ int i=0; while(p->next!=NULL) i++; return i; } LinkList Search_1st_Common(LNode *p,LNode ...原创 2019-08-17 09:00:31 · 1843 阅读 · 0 评论 -
【数据结构】(单链表)递归删除值为 x的节点(不带头节点)
算法思想:其实就是递归查找然后判断删除。注意:这里由于传递的是引用所有不会断链void Delete_x(LinkList &head,int x){ if(head==NULL) return; if(head->data==x){ LNode *p; //临时结点 p=head; head=head->next; //这里是因为递归调用传的为引用...原创 2019-08-17 08:56:14 · 1748 阅读 · 0 评论 -
【数据结构】(单链表)删除链表中范围内数字
算法思想:这个就比较简单了只要保证不断链就行void RangeDelete(LinkList &p,int x,int y){ if(p->next==NULL){ return; } LNode *pre=p; LNode *cur=pre->next; while(cur){ if(cur->...原创 2019-08-17 08:51:18 · 1434 阅读 · 0 评论 -
【数据结构】(单链表)单链表选择排序
算法思想: 每次选择最大的或者最小的 进行尾插或者头插。本例选择每次找到最小的数进行尾插 void SelectSort(LNode *p){ if(p->next==NULL||p->next->next==NULL) //若链表为空或者链表中只有一个元素 返回 return ; LNode *s=(LinkList)malloc(sizeof(LNo...原创 2019-08-17 08:47:07 · 1571 阅读 · 0 评论 -
【数据结构】(单链表)单链表冒泡排序
算法思想:冒泡排序的核心思想为 内存循环每次冒泡出一个最大的数到尾端 void BubbleSort(LNode *&head){ if(head->next==NULL||head->next->next==NULL) //若链表为空或者链表中只有一个元素 返回 return ; int flag=0; LNode *cur; ...原创 2019-08-17 08:45:00 · 2300 阅读 · 0 评论 -
【数据结构】(单链表)单链表插入排序
算法思想:将链表分为两个链表(逻辑上)一个链表默认有序(只含有一个有效节点) 另为无序链表/ 大循环 为每次循环 从无序链表拿出一个元素 将其插入有序链表中void InsertSort(LNode *p){ if(p->next==NULL||p->next->next==NULL) //若链表为空或者链表中只有一个元素 返回 return ; LNode *...原创 2019-08-17 08:43:01 · 2362 阅读 · 0 评论 -
【数据结构】(单链表)带头结点删除最小值元素
算法思想:while 循环 找出最小节点的前驱节点 以及最小值节点 之后删除即可void Delete_Min(LNode *&head ){ if(head ->next==NULL) return; LNode *pre=head ; //前驱结点 LNode *current=head ->next; //游标指针 LNode *min=head...原创 2019-08-17 08:41:11 · 4445 阅读 · 0 评论 -
【数据结构】(单链表)带头链表就地逆置
带头链表就地逆置(就地的意思为 空间复杂度为1)算法思想:链表的逆置采用非递归的方法使用了三个指针详见代码// 带头链表就地逆置(就地的意思为 空间复杂度为1)void Reverse2(LNode *head){ if(head->next->next==NULL||head->next==NULL) //链表中只有一个元素不需要逆置 return; ...原创 2019-08-17 08:31:20 · 2077 阅读 · 0 评论 -
【数据结构】(循环链表)删除无序表中 绝对值相同的元素要求时间最优解 本题采用 空间换时间
时间复杂度O(m) 空间复杂度O(n)其中数组的最大值 |data|<n注:若不给最大值可以求链表最大值与最小值想减进行映射算法思想:使用辅助数组来记录链表中结点出现的次数,若出现两次以上则删除该链表 void Del_value(LinkList &A,int n){ if(A->next==NULL) return; ...原创 2019-08-18 17:31:03 · 239 阅读 · 0 评论 -
【数据结构】(循环链表)单链表查询倒数第k个节点方案
算法思想:定义两个指针p,q ,q先走k步,之后p,q同时移动 p所指向的即为所求 int Search_k(LinkList A,int k){ if(A==NULL||A->next==NULL) return 0; int count=0; LinkList p,q; p=q=A->next; while(q){ if(count<k){ ...原创 2019-08-18 16:48:15 · 246 阅读 · 0 评论 -
【数据结构】(循环链表)链接循环单链表
算法思想:这个就很简单了就是找尾指针的过程进行解链,和链接就行void Link_A_B(LinkList &A,LinkList &B){ if(A->next==NULL||B->next==NULL) return ; LinkList pa=A->next; LinkList pb=B->next; while(pa-&g...原创 2019-08-18 15:30:37 · 336 阅读 · 0 评论