单链表逆置

写一个算法,借助栈将带头结点的单链表逆置。 将链表逆置,其实是将链表结点中的数据元素倒置,由于不知道链表的长度,可以用链栈来实现。扫描链表,将链表中数据元素依次进栈,然后,…

队列

队列(Queue)是有限个同类型数据元素的线性序列,是一种 先进先出 的线性表,新加入的数据元素插在队列尾端,出队列的数据元素在队列首部被删除。 队列的顺序实现 // 顺序队列的类型定…

栈(Stack)是运算受限的线性表,这种线性表上的插入和删除运算限定在表的某一端进行。允许进行插入和删除的一端称为栈顶,另一端称为栈底。 栈的顺序实现 // 顺序栈的类型定义 const i…

二叉排序树

二叉排序树的二叉链表类型定义 typedef struct btnode { KeyType key; struct btnode *lchild, *rchild; // 指向左右孩子的指针 } BSTNode, *BinTree; // BinTree 为指向二叉链表结点的…

线性表的链接存储

线性表的链接存储是指它的存储结构是链式的。线性表常见的链式存储结构有单链表、循环链表和双向循环链表,其中最简单的是单链表。 单链表的类型定义 // 假定数据元素类型为 DataType t…

线性表的顺序存储

用顺序存储实现的线性表称为顺序表,一般使用数组来表示顺序表。 顺序表的类型定义 // 假定数据元素类型为 DataType typedef struct { int num; // 学号 char name[8]; // 姓名 char se…

二分查找

二分查找算法,也叫折半查找算法。时间复杂度为 O(logn),只适用于有序表。 #include <stdio.h> // 循环实现方式 int binary_search(int *a, int n, int key) { int low, high, m…

递归

栈有一个很重要的应用:在程序设计语言中实现了递归。我们先来看一个经典的递归例子:斐波那契数列。 斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 特点:前面相邻两…