导航菜单

【2022

在这里插入图片描述

文章目录一、线性表1. 逆转顺序表中的所有元素2. 删除线性链表中数据域为 item 的所有结点3. 逆转线性链表4. 复制线性链表(递归)5. 将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表二、树1. 二叉树的先序遍历(递归算法)2. 二叉树的中序遍历(递归算法)3. 二叉树的后序遍历(递归算法)4. 二叉树的先序遍历(非递归算法)5. 二叉树的中序遍历(非递归算法)6. 二叉树的后序遍历(非递归算法)7. 二叉树的按层次遍历8. 建立二叉树(从键盘输入数据,先序遍历递归算法)9. 建立二叉树(从数组获取数据)10. 求二叉树的深度(递归算法)11. 求二叉树的深度(非递归算法)12. 求结点所在层次13. 交换二叉树中所有结点的左右子树的位置14. 删除二叉树中以某个结点为根结点的子树三、查找1. 顺序查找的递归算法2. 折半查找3. 折半查找的递归算法4. 在按值递增排列且长度为 n 的线性表中折半查找并插入一元素5. 在按值递增排列且长度为 n 的线性表中折半查找值不小于 key 的最小元素四、图1. 深度优先算法2. 广度优先算法五、排序1. 插入排序2. 折半插入排序3. 冒泡排序4. 快速排序5. 选择排序6. 堆排序以下算法是数据结构中基础的算法也是很重要的,在某些学校的研究生考试中尤其是自命题考研中经常出现。以下算法也是其他算法的基础,建议都背会!

一、线性表 1. 逆转顺序表中的所有元素

算法思想:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,……,依此类推。

void Reverse(int A[], int n){int i, t;for (i=0; i next; while (p != NULL){if (p->data == item) { q->next = p->next; free(p);p = q->next;} else {q = p;p = p->next;}}if (list->data == item){q = list;list = list->next; free(q);}} 3. 逆转线性链表 void Reverse(LinkList &list){LinkList p, q, r;p = list; q = NULL;while (p != NULL){r = q; q = p;p = p->next; q->next = r;}list = q;} 4. 复制线性链表(递归) LinkList Copy(LinkList lista){LinkList listb;if (lista == NULL) return NULL;else {listb = (LinkList)malloc(sizeof(LNode)); listb->data = lista->data;listb->next = Copy(lista->next); return listb;}} 5. 将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表 LinkList MergeList(LinkList lista, LinkList listb){LinkList listc, p = lista, q = listb, r;// listc 指向 lista 和 listb 所指结点中较小者if (lista->data data) { listc = lista;r = lista;p = lista->next;} else {listc = listb; r = listb;q = listb->next;}while (p != NULL && q != NULL){if (p->data data) { r->next = p;r = p;p = p->next;} else {r->next = q; r = q;q = q->next;}}// 将剩余结点(即未参加比较的且已按升序排列的结点)

相关推荐: