如何自己搭建一个网站,网站被做301跳转了怎么办,石家庄企业网络推广,如何开发微信公众号小程序数据结构【线性表篇】(三#xff09; 文章目录 数据结构【线性表篇】(三#xff09;前言为什么突然想学算法了#xff1f;为什么选择码蹄集作为刷题软件#xff1f; 目录一、双链表二、循环链表三、静态链表 结语 前言 为什么突然想学算法了#xff1f; 用较为“官方…数据结构【线性表篇】(三 文章目录 数据结构【线性表篇】(三前言为什么突然想学算法了为什么选择码蹄集作为刷题软件 目录一、双链表二、循环链表三、静态链表 结语 前言 为什么突然想学算法了 用较为“官方”的语言讲是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中要想完成任何实质性的工作理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 但从实际而言是因为当下竞争压力逐渐增大无论走哪一条路都不免需要一些相对丰富的算法知识是故便产生了一个寒假巩固速成算法的计划可能对于像我这种算法竞赛小白而言几乎很难但我仍然还是想尝试一下毕竟梦想还是要有的万一实现了呢(▽)~ 为什么选择码蹄集作为刷题软件 码蹄集是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的其依托全国各大名校计算机系和清华大学出版社等单位的强大资源旨在为计算机学习爱好者提供全面和权威的计算机习题。 . 目录
一、双链表
typedef struct DNode{ //定义双链表结点类型int data; //数据域struct DNode *prior,*next; //前驱和后驱指针
}DNode,*DLinklist;//初始化双链表
bool InitDLinkList(DLinklist L){L (DNode *)malloc(sizeof(DNode)); //分配一个头结点if(LNULL) //内存不足分配失败return false;L-prior NULL; //头结点的prior永远指向NULLL-next NULL; //头结点之后暂时还没有节点return true;
}//判断双链表是否为空(带头结点)
bool Empty(DLinklist L){if(L-next NULL)return true;elsereturn false;
}//双链表的插入
//在p结点后插入s结点
bool InsertNextDNode(DNode *p, DNode *s){if(pNULL || sNULL) //非法参数return false;s-nextp-next;if(p-next ! NULL)p-next-priors; //如果p结点有后继结点s-priorp;p-nexts;return true;
}//删除p结点的后继结点
bool DeleteNextDNode(DNode *p){if(pNULL) return false;DNode *q p-next; //找到p的后继结点qif(qNULL) return false; //p没有后继p-nextq-next;if(q-next!NULL) //q结点不是最后一个结点q-next-priorp;free(q); //释放结点空间return true;
}//双链表的删除
void DestoryList(DLinklist L){//循环释放各个数据结点while(L-next ! NULL)DeleteNextDNode(L);free(L);LNULL;
}//双链表的遍历
//前向遍历
//while(p!NULL){
// //对结点p做出相应处理如打印
// pp-next;
//}//后向遍历
//while(p!NULL){
// //对结点p做出相应处理
// pp-prior;
//}//前向遍历(不带头结点)
//while(p-prior!NULL){
// //对结点p做出相应处理
// pp-prior;
//}void printDoubleList(DLinklist L){DNode *p L;p p-next;while(p!NULL){printf(%d ,p-data);p p-next;}printf(\n);
}int main(){//初始化双链表DLinklist L;InitDLinkList(L);return 0;
}二、循环链表
//循环单链表
typedef struct LNode{ //定义单链表结点类型int data; //每个节点存放一个数据元素struct LNode *next; //指针指向下一个节点
}LNode, *LinkList;//初始化一个循环单链表
bool InitList(LinkList L){L (LNode *)malloc(sizeof(LNode)); //分配一个头结点if(LNULL) //内存不足分配失败return false;L-next L; //头结点next指向头结点return true;
}//判断循环单链表是否为空
bool Empty(LinkList L){if(L-next L)return true;elsereturn false;
}//判断结点p是否为循环单链表的表尾结点
bool isTail(LinkList L,LNode *p){if(p-next L)return true;elsereturn false;
}//循环双链表
typedef struct DNode{ //定义双链表结点类型int data; //每个节点存放一个数据元素struct DNode *prior,*next;
}DNode, *DLinkList;//初始化一个循环双链表
bool InitDLinkList(DLinkList L){L (DNode *)malloc(sizeof(DNode)); //分配一个头结点if(LNULL) //内存不足分配失败return false;L-prior L; //头结点的prior指向头结点L-next L; //头结点的next指向头结点return true;
}//判断循环双链表是否为空
bool Empty(DLinkList L){if(L-next L)return true;elsereturn false;
}//判断结点p是否为循环双链表的表尾结点
bool isTail(DLinkList L,DNode *p){if(p-next L)return true;elsereturn false;
}//双链表的插入
//在p结点之后插入s结点
bool InsertNextDNode(DNode *p, DNode *s){s-nextp-next; //将结点*s插入到结点*p之后p-next-priors;s-priorp;p-nexts;
}//双链表的删除
//删除p的后继结点q
bool DeleteNextDNode(DNode *p,DNode *q){p-nextq-next;q-next-priorp;free(q);
}int main(){//初始化循环双链表DLinkList L;InitDLinkList(L);return 0;
}三、静态链表
#define MaxSize 10 //静态链表的最大长度
typedef struct Node{ //静态链表结构类型的定义int data; //存储数据元素int next; //下一个元素的数组下标
}SLinkList[MaxSize];int main(){SLinkList L;return 0;
}结语
感谢大家一直以来的不断支持与鼓励码题集题库中的进阶塔350题正在逐步更新之后会逐步跟进星耀王者的题尽请期待 同时也希望这些题能帮助到大家一起进步祝愿每一个算法道路上的“苦行僧”们都能够历经磨难终成正果既然选择了这条路走到了这里中途放弃岂不是太过可惜
另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from333.999.0.0供大家更好的进行学习与刷题(▽)~
愿你的结局配得上你一路的颠沛流离。