随笔分类 - 数据结构
摘要:简介 假设:对于一个运算表达式,只考虑2元运算(如加减乘除 )和 操作数,我们就可以用一个二叉树去存储这个表达式:用叶子结点存储操作数,内部结点存储运算符,这样的二叉树就是一个表达式树。由于运算符都是二元的,则这个树实质也是一个满二叉树。 遍历表达式树 先序遍历表达式树,得到的是前缀表达式(波兰表达
阅读全文
摘要:队列简介 队列也是一种线性结构。但它只能在表的一端追加元素(这端叫做队尾),另一端删除元素(这端叫做队头) 。因此队列是一种FIFO (先进先出)特性的线性数据结构。 从队头删除元素的操作叫做出队,从队尾追加元素的操作叫做入队。 如图是含有n个元素的队列的模型。根据队列的出入元素特点,可以确定,元素
阅读全文
摘要:简介 栈也是一种线性表结构,只不过栈的操作是受限的,它的特点就是在栈顶方向添加新的元素,且删除元素也只能从栈顶方向删除。因此栈是一种LIFO(后进先出)特性的数据结构。 压栈:新的元素放入栈的操作。 出栈:从栈中移除一个元素的操作。 因为栈是一种线性结构,所以可以通过前面所学的链表和顺序表作为内部实
阅读全文
摘要:简介 在单链表中,我们只能向一个方向(向后)访问结点:即从索引小的到索引大的方向,而不能逆向访问,例如通过第3个结点的指针,无法直接得到第2个结点的地址。这是因为单链表的每一个结点只保存了下一个结点的地址。 而双向链表中,结点有2个指针域:prior 和 next。next同样保存下一个结点的指针,
阅读全文
摘要:简介 循环单链表 是在在单链表的基础上,用最后的一个结点的指针域指向头结点形成的。因此它在逻辑上是一个环形结构。 要点:1、遍历结束的标志是 p == 【头结点地址】,而不是p==NULL 2、表为空的判断标志是: if( head->next == head ) 3、在单循环链表中,从任一结点出发
阅读全文
摘要:简介 静态表依然是一种链表,只不过结点是存储在预先分配好的一个大的结点数组中的。使用静态表的场合是:有些编程语言没有指针,但有数组,因此就不能使用传统的链表,这个时候就可以使用静态表是去实现。 特点:结点的 “指针域” 保存的是下一个结点在数组中的索引。它依然是链表,不支持随机访问。 静态表在实际编
阅读全文
摘要:简介 特点: 1、 用一组地址任意的存储单元 存储数据元素。存储单元地址 可连续,也可不连续。为了形成逻辑线性结构,每一个结点 除了保存需要存储的数据外,还需要保存逻辑上相邻的下一个结点的地址。 2、链表由n个类型相同的结点通过指针链接形成线性结构。结点由数据域和指针域组成。数据域用于存储结点代表的
阅读全文
摘要:顺序表简介 特点: 1、使用一组地址连续的存储单元依次存储表中的数据元素,常见的就是使用数组去实现。 2、顺序表中逻辑相邻的数据元素,在物理内存上也相邻。 3、顺序表中的任意数据元素都可随机访问,即访问一个数据元素的时间复杂度为O(1)。 假设每个数据元素的占用内存大小为L,表中第一个数据元素的地址
阅读全文
摘要:约瑟夫环问题介绍: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 链表初始状态: 刚开始写这个程序的时候,遇到一个Bug,那就是没有解决链表
阅读全文

浙公网安备 33010602011771号