数据结构十(选择排序SelectSort)
前言选择排序 从序列中找到一个最小元素,把最小元素放到整个序列的首部,重复n轮,直到整个序列有序   More info: SelectSort 选择排序(SelectSort)选择排序 从序列中找到一个最小元素,把最小元素放到整个序列的首部,重复n轮,直到整个序列有序12345678910111213141516171819202122232425262728bool SelectSort(int buf[],int bufsize){    //备份交换元素    int temp = 0;    //1 通过线性查找找到最小元素,需要比较 n-1 轮(最后一轮不用排)    for (int n = 0; n < bufsize-1; ++n)    {        //假设每轮序列中第一个元素为最小        int min = n;        //找到最小元素的下标(m=n为自己和自己比,可以优化掉)        for (int m = n+1; m < bufsize; ++m)        {       ...
数据结构九(冒泡排序BubbleSort)
前言插入排序 是把无序序列依次插入到有序序列,一般是从尾部开始比较   More info: BubbleSort 冒泡排序(BubbleSort)元素两两之间进行交换,需要比较n轮(n初值为1),每轮需要 bufsize-n 次(从左到右比较,升序)12345678910111213141516171819202122bool BubbleSort(int buf[],int bufsize){    //备份元素 临时存储交换值    int temp=0;    //1 循环比较元素,比较的第n轮,总共需要比较(bufsize-1)轮    for (int n = 1; n < bufsize; n++)    {        //每轮比较中需要 两两比较 的次数为(n=1 两两比较bufsize-1次;n=2 两两比较bufsize-2次...)        for (int m = 0 ; m < bufsize-n ; m++)        {            //两两比较           ...
数据结构八(插入排序InsertSort)
前言插入排序 是把无序序列依次插入到有序序列,一般是从尾部开始比较   More info: InsertSort 插入排序(InsertSort)把无序序列的第一个当有序序列,然后每次从无序序列中拿出一个元素 在有序序列中进行比较(一般是从尾部开始比较)1.如果比较结果为 待插入大于被比较的有序元素 则把待插入元素插入到被比较的有序元素后面2.如果比较结果为 待插入小于被比较的有序元素 则把被比较的元素向后移动一位(依次与有序元素进行比较)直到来到首位或大于被比较的元素12345678910111213141516171819202122232425262728293031323334bool InsertSort(int buf[],int bufsize){    //备份元素    int temp=0;    //1 选择第一个元素作为已经排序过的,剩下的元素作为无序序列    for (int i = 1; i < bufsize; ++i)    {        //备份待插入元素        temp = buf[i];      ...
数据结构七(二叉树BSTree)
前言设计BST二叉查找树,方便对二叉树进行结点的增删,采用双向不循环链表实现,每个结点都需要2个指针,分别指向该结点的左子树(lchild)和右子树(rchild)附加1:计算所有节点的数量附加2: 计算所以叶子节点的数量(度为0)附加3: 计算二叉树的深度   More info: BSTree 构造二叉树(BSTree)构造BST树的结点 BST树中所以结点的数据类型应该是相同的(BSTreeNode)1234567//类型别名typedef int dataType_t;typedef struct BSTreeNode {    dataType_t Keyval;                 //BST树的键值    struct BSTreeNode *lchild;      //BST树的左子树的指针域    struct BSTreeNode *rchild;      //BST树的右子树的指针域}...
数据结构六(顺序栈sequenceStack)
前言 创建一个顺序栈实现对顺序栈内元素的 ——入栈 ——出栈 ——遍历顺序栈   More info: sequenceStack 构造顺序栈(sequenceStack)构造顺序栈记录参数(顺序栈的栈底地址 顺序栈的容量 顺序栈的栈顶元素的下标)1234567//类型别名typedef int dataType_t;typedef struct sequenceStack {    dataType_t *Bottom;       //顺序栈的栈底地址    unsigned int size;      //顺序栈的容量    int Top;               //顺序栈的栈顶元素的下标} sqStack_t; 创建顺序栈并对顺序栈进行初始化(sqStack_Create)123456789101112131415161718192021222324252627sqStack_t *sqStack_Create(unsigned int size){    //1.1 利用calloc为顺序栈的管理结构体申请堆内存   ...
数据结构五(双向循环链表DoubleCirLList)
前言 创建一个双向循环链表实现对双向循环链表内元素的 ——增加(头插 指定位置插入 尾插) ——删除(头删 指定位置删除 尾删) ——遍历双向循环链表    More info: DoubleCirLList 构造双向循环链表(DoubleCirLList)构造双向循环链表的结点 双向循环链表中所有结点的数据类型应该是相同的1234567//类型别名typedef int dataType_t;typedef struct DoubleCirLList {    dataType_t data;                 // 双向循环链表的数据域,用于存储具体的数据    struct DoubleCirLList *prev;   // 双向循环链表的前驱指针域,指向前一个节点    struct DoubleCirLList *next;   // 双向循环链表的后继指针域,指向后一个节点}...
数据结构四(单向循环链表CircularLinkedList)
前言 创建一个单向循环链表实现对单向循环链表内元素的 ——增加(头插 指定位置插入 尾插) ——删除(头删 指定位置删除 尾删) ——遍历单向循环链表    More info: CircularLinkedList 构造单向循环链表(CircularLinkedList)构造单向循环链表的结点 单向循环链表中所有结点的数据类型应该是相同的123456//类型别名typedef int dataType_t;typedef struct CircularLinkedList {    dataType_t data;                 //单向循环链表的数据域    struct CircularLinkedList *next;      //单向循环链表的指针域} CricLList_t; 创建一个空链表,空链表应该有一个头结点(CricLList_Create)12345678910111213141516CricLList_t* CricLList_Create(void){    //1.1 创建一个头结点并给头结点申请内存...
数据结构二(单向链表linkedList)
前言 创建一个单向链表实现对单向链表内元素的 ——增加(头插 指定位置插入 尾插) ——删除(头删 指定位置删除 尾删) ——遍历单向链表   More info: linkedList 构造单向链表(linkedList)构造单向链表的结点 单向链表中所有结点的数据类型应该是相同的123456//类型别名typedef int dataType_t;typedef struct linkedList {    dataType_t data;                 //单向链表的数据域    struct linkedList *next;      //单向链表的指针域} lList_t; 创建一个空链表,空链表应该有一个头结点(lList_Create)12345678910111213141516lList_t* lList_Create(void){    //1.1 创建一个头结点并给头结点申请内存    lList_t *Head = (lList_t*)calloc(1,sizeof (lList_t));   ...
数据结构一(顺序表sequenceList)
  前言 创建一个顺序表实现对顺序表内元素的 ——增加(头插 指定位置插入 尾插) ——删除(头删 指定位置删除 尾删) ——遍历顺序表  More info: sequenceList 构造顺序表(sequenceList)构造顺序表记录参数(顺序表的首地址 顺序表的容量 顺序表的有效元素的下标)1234567//类型别名typedef int dataType_t;typedef struct sequenceList {    dataType_t *Addr;       //顺序表的首地址    unsigned int size;      //顺序表的容量    int last;               //顺序表的有效元素的下标} sqList_t; 创建顺序表并对顺序表进行初始化(sqList_Create)123456789101112131415161718192021222324252627sqList_t *sqList_Create(unsigned int size){    //1.1...
数据结构三(双向链表DoubleLinkedList)
前言 创建一个双向链表实现对双向链表内元素的 ——增加(头插 指定位置插入 尾插) ——删除(头删 指定位置删除 尾删) ——遍历双向链表    More info: DoubleLinkedList 构造双向链表(DoubleLinkedList)构造双向链表的结点 双向链表中所有结点的数据类型应该是相同的1234567//类型别名typedef int dataType_t;typedef struct DoubleLinkedList {    dataType_t data;                 //双向链表的数据域    struct DoubleLinkedList *prev;      //双向链表的后继指针域    struct DoubleLinkedList *next;      //双向链表的前驱指针域} DoubleLList_t; 创建一个空链表,空链表应该有一个头结点(DoubleLList_Create)1234567891011121314151617DoubleLList_t*...
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)
.png)
.png)
