数据结构
魏尔肖
如果生命没有起伏那么何来意义
展开
-
C语言实现单链表的简单操作【完整版】
#ifndef __LIST__H_#define __LIST__H_typedef int DataType;typedef unsigned int size_t;typedef struct Node{ DataType _data; struct Node *_pNext;}Node, *PNode;void InitList(PNode* pHead)原创 2017-03-19 22:06:22 · 1391 阅读 · 0 评论 -
c++ 实现双链表
#include using namespace std;typedef int DataType;struct Node{ Node(const DataType& data) :_data(data) ,_pre(NULL) ,_next(NULL) {} DataType _data; Node* _pre; Node* _next;};class L原创 2017-03-07 22:04:38 · 242 阅读 · 0 评论 -
二叉树面试题—前,中,后序(非递归),判断是否为完全二叉树
二叉树的基本操作Node* GetParent(Node* x) //得到父节点 { if ( _pRoot == NULL) return _pRoot; return _GetParent(_pRoot, x); } Node* Find(const T& value) //查找结点 { ret原创 2017-05-05 18:25:16 · 509 阅读 · 0 评论 -
优先级队列(二叉堆)
堆是一颗被完全填满的二叉树,底层的元素从左到右填入。 所以一个高度为h的堆有2^h到2^(h+1)-1个节点,这样的堆可以用一个数组来表示,堆顶为arr[0],父节点的下标为n,左儿子的下标就是2n+1, 堆有大堆(父节点的值大于儿子节点的值)和小堆(父节点的值小于儿子节点的值),大堆的根节点就是数组中最大的值,小堆的根节点就是数组中最小的值。堆只能访问根节点,能进行插入和删除操作。原创 2017-05-14 17:56:17 · 384 阅读 · 0 评论 -
AVL平衡树的旋转
AVL树是一种平衡查找树(每个节点左子树与右子树的高度差不超过1),这样可以保证树不偏向一边,使查找的时间复杂度降低。 需要给节点一个平衡因子_bf(右子树的高度减去左子树的高度)。 AVL树的插入分为下面几种情况: 在父节点的右子树插入节点,父节点的bf+1,如果父节点bf等于0,树平衡,插入成功,父节点bf等于1,右子树高度加1,接着向上调整。 在父节点的左子树插入节点,父节点的bf-1原创 2017-05-25 23:43:32 · 570 阅读 · 0 评论 -
二叉树的创建,前序,中序,后序,层序遍历
二叉树(binary tree)是另一种树形结构,它的特点是每个节点至多有两颗子树,并且其子树有左右之分,并且顺序不能颠倒。 主要用递归的思想完成创建,遍历等操作。 #include <iostream>using namespace std;#include <string>#include <queue>template <typename T>struct TreeNode{原创 2017-04-27 23:49:29 · 1673 阅读 · 0 评论 -
查找二叉树的实现(查找,删除,插入)分别用递归和非递归
对于一个查找二叉树的每个节点X,它的左子树中的节点的关键值都小于X的关键值,右子树中的所有节点的关键值都大于X的关键值。 并且所有的关键值都是相异的,不存在相同的。 二叉树的平均深度是O(log N),对于查找树找一个元素最多查找树的高度次。#include <iostream>using namespace std;template <class K, class V>struct BS原创 2017-05-15 20:37:53 · 1468 阅读 · 0 评论 -
单链表相关面试题总结
主要来自于《剑指offer》,都是面试高频题1. 删除结点删除节点需要知道上一个节点的地址。就需要遍历,可以把问题转化为删除下一个节点,把下一个节点的值拷贝给本节点。 删除pdel就转化为删除pnext,不需要再从头遍历。时间复杂度为O(1).但是pdel为尾节点或者头节点需要另外的处理。typedef struct SignalListNode { SignalListNode(co原创 2017-07-10 23:30:39 · 594 阅读 · 0 评论 -
查并集(朋友圈问题)
假设有A,B,C,D,E,5个人A,B在一个朋友圈内,B,C在一个朋友圈内,这样A,B,C就在一个朋友圈内,总共有多少个朋友圈。 当人数较多时不容易算出。 可以利用数据结构查并集。 设5个人的初值为-1,用数组下标代替A,B,C,D,E A,B在一个朋友圈,设A为根,B的值替换为A的下标,将A,B合并,A加上B本身的值为-2代表朋友圈内有两个人,当所取得值为负数时为根,为正数时代表所在朋原创 2017-07-24 16:11:03 · 4984 阅读 · 1 评论