![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 52
数据结构与算法
柳阿九
前途似海,来日方长~
展开
-
【数据结构】带头双向循环链表的实现
带头双向循环链表简介 带头双向循环链表结构如下: 带头双向链表的特点: 空链表不是没有结点,而是有一个头结点的链表,此时头结点的前后指针都指向自己,且头结点中存储的元素非链表中的有效元素。 带头双向循环链表的头删,是删除头结点的下一个结点,而非head结点。 带头双向循环链表的尾删,无需遍历该链表去寻找最后一个结点,因为头结点指向的前一个节点就是最后一个结点。 带头双向循环链表的定义及功能实现 /////dclist.h #pragma once #include"commen.h" typedef原创 2021-02-09 22:31:34 · 216 阅读 · 0 评论 -
【数据结构】单向循环链表的实现
不带头单向循环链表结构如下: 其中,详细介绍不带头单向循环链表的排序功能的实现。 以以下链表为例: 第一步: 将该单向循环链表分成只有一个结点的单向循环链表p和由剩下结点组成的一个单向不循环链表q。 第二步: 将p指向q链表要比较的第一个结点,q用来保存下一个结点,prev用来保存要插入位置的前一个节点的位置,cur用来保存要插入位置的结点。 比较 1<2,并没有进入第二个while中,此时prev仍为NULL,故应该将结点头插进入该单向循环链表中,由于头插会改变头结点,而单向循环链表的尾结点会原创 2021-02-08 17:49:42 · 555 阅读 · 3 评论 -
【数据结构】不带头单向不循环链表的实现
不带头链表的功能实现如下: ///////slist.h #pragma once #include"commen.h" #define ElemType int typedef struct SListNode { ElemType data; struct SListNode* next; }SListNode; //不带头结点的单链表 typedef SListNode* SList; void SListInit(SList* phead); void SListDestroy(SLis原创 2021-02-04 16:40:33 · 105 阅读 · 0 评论 -
【数据结构】排序之选择排序与堆排序
在前面排序中,所了解的直接插入排序与希尔排序,都属于插入排序,而今天所要总结选择排序和堆排序则都属于选择排序。 一、选择排序 算法思想 什么是选择排序呢?选择排序,就是在一组乱序的数组a[10]中(在这里我们以升序为例子来说),遍历第一遍选择出最小的,与a[0]交换位置,将最小的数,放到首位,接下第二次遍历,在选择出次小的,放到a[1]的位置上,就这样一直遍历到最大的元素出来,将其放到a[9]的...原创 2019-07-30 17:37:09 · 126 阅读 · 0 评论 -
【数据结构】排序之插入排序、希尔排序
关于插入排序 算法思想 第一步思想的引入 第二步思想的深入 以上的引入是为了能够对插入排序有一个更加深刻的理解。而所谓的插入排序,其实引 用的就是上面的思想。下面是对插入排序算法思想更加详细的分析。 具体实现 void InsertSort(int* arr, int n)//升序 { for (int i = 0; i < n - 1; i++) //多趟插入排序(设第一个数...原创 2019-07-29 17:30:27 · 114 阅读 · 0 评论 -
【数据结构】顺序表的实现
顺序表主要实现模块如下 //定义顺序表的结构 #define SEQLIST_SIZE 8 #define DateType int typedef struct SeqList { DateType* base;//指向数据的指针 size_t _capacity; size_t _size; }SeqList; void Swap(DateType* a, DateType* b) { DateType tmp = *a; *a = *b; *b = tmp; } bool IsFull(S原创 2021-01-31 18:34:27 · 203 阅读 · 0 评论