diff --git a/Binary Tree/1-二叉树/btree.c b/Binary Tree/1-二叉树/btree.c deleted file mode 100644 index fd00afe..0000000 --- a/Binary Tree/1-二叉树/btree.c +++ /dev/null @@ -1,31 +0,0 @@ -/* -### B树基础 - -B树即B-tree(B树就是B-tree),B是balanced,也就是平衡的意思。 - -B树又叫平衡多路查找树,节点的直接点个数可以多于2个,一颗m阶的B树: - -1) 树中每个节点做多含有m个子节点 -2) 根节点不是叶子节点,至少有2个孩子 -3) 所有叶子节点在同一层 -4) 除根节点和叶子节点外,每个分支节点至少有[m/2]个子树 -5) 有j个孩子的非叶子节点有 j-1 个关键码,关键码递增一次排列 - - -### B树应用 - -数据库 -文件系统 - - -### B树存储结构 - - - -### B树问题和延伸阅读 - - -*/ - - - diff --git a/Binary Tree/1-二叉树/btree/bintree.c b/Binary Tree/1-二叉树/btree/bintree.c deleted file mode 100644 index 8297aa2..0000000 --- a/Binary Tree/1-二叉树/btree/bintree.c +++ /dev/null @@ -1,349 +0,0 @@ -/** -* 第一次题目 :构建二叉树(链表存储方式),空格表示空树,实现二叉树的基本操作:创建,遍历(先,中,后,按层)二叉树 -* 提交邮箱 :510495266@qq.com to learn_algorithm@163.com -* 邮件题目 :第一期第一次作业 -**/ - -#include -#include - - -typedef struct BiTNode{ - - char item; - struct BiTNode *lChild,*rChild; - -}BiTNode,*BiTree; - - - - - -// ========================================================================== - - -#define OK 1 -#define ERROR 0 -typedef int bool; - - -typedef BiTree ElemType ; // 也可能是一个复杂的复合类型 -typedef int Status; - - - -//队列的顺序存储 -typedef struct Node{ - - ElemType *elem; - ElemType *head; - ElemType *tail; - int length; // 当前队列的长度 - int size; // 队列容器的长度,在队列慢得时候可以扩容 - - -}SqQueue; - -// -// 在队列采用顺序存储时,有一个毛病,就是队列操作一段时间后,头指针到了队列容器的尾部,而头指针前面的容器内存不可用了, -//造成内存极大的浪费,这个问题可以通过循环队列来解决。但是在 -// 链式队列上则不存在这样的问题 -// - - -typedef struct QNode{ - - struct QNode *next; - ElemType elem; - -}LinkQueue; - - -// 队列需要维护两个 指针 (队头指针,队尾指针) - -typedef struct{ - - LinkQueue *head; - LinkQueue *tail; - int length; - -}Queue; - - -Status initQueue(Queue *queue);// 带头结点,没有引用传值,就用指针的指针吧 -bool isEmpty(Queue *q); -int length(Queue *q); - - -// 在头部插入,尾部删除 -Status getHead(Queue *q,ElemType *e); -Status enQueue(Queue *q,ElemType e); -Status deQueue(Queue *q,ElemType *e); - -void traveser(Queue *q); - - -Status initQueue(Queue *queue){// 带头结点,没有引用传值,就用指针的指针吧 - - LinkQueue *lq = (LinkQueue *)malloc(sizeof(LinkQueue)); - if (!lq) { - return ERROR; - } - - lq->elem = NULL; - lq->next = NULL; - - (queue)->head = (queue)->tail = lq; // -> 优先级高于 * ,老老实实打上括号 - (queue)->length = 0; - - return OK; - -} - -bool isEmpty(Queue *q){ - - return (q->head == q->tail); - -} - -int length(Queue *q){ - -// int ret; -// LinkQueue *p = q->head; -// while (p != q->tail) { -// ret++; -// p = p->next; -// -// } - - return q->length; - -} - -Status getHead(Queue *q,ElemType *e){ - - LinkQueue *p = q->head->next; - if (!p) { - *e=NULL; - return ERROR; - } - - *e = p->elem; - return OK; - -} - -// 入队(加入到队尾) -Status enQueue(Queue *q,ElemType e){ - - LinkQueue *newNode = (LinkQueue *)malloc(sizeof(LinkQueue)); - if (!newNode) { - return ERROR; - } - newNode->elem = e; - newNode->next = NULL; - q->tail->next = newNode; - q->tail = newNode; - - q->length++; - - return OK; - -} - -//出队(队头). 注意,可能只有1个元素,造成队尾指针丢失 -Status deQueue(Queue *q,ElemType *e){ - - LinkQueue *p = q->head->next; - if (!p) {// 队列空 - return ERROR; - } - - if (e) { - *e = p->elem ; - } - - LinkQueue *temp = p->next; - q->head->next = temp; - if (p == q->tail) { - q->tail = q->head; - } - free(p); - - - q->length--; - - return OK; - -} - - -void traveser(Queue *q){ - - LinkQueue *p = q->head->next; - while (NULL != p) { - //printf("%d\n",p->elem); - p=p->next; - } - -} - - -// ================================================== - - - -/* -int CreateBiTree(BiTree *T) -{ - - *T = (BiTNode *)malloc(sizeof(BiTNode)); - if (*T==NULL) - { - printf("memery malloc failure !\n"); - return -1; - } - - printf("enter data to create node:\n"); - scanf("%c",&((*T)->item)); - if((*T)->item=='#'){ - *T=NULL; - } - if(*T){ - printf("创建左子树:\n"); - CreateBiTree( &((*T)->lChild) ); - printf("创建右子树:\n"); - CreateBiTree( &((*T)->rChild) ); - } - - return 0; -} -*/ - -// BiTree CreateBiTree() - -// 先序遍历方式创建二叉树 -BiTree CreateBiTree(){ - - char c; - BiTNode *tree; - - // 过滤回车键 - - - scanf("%c",&c); - if (c==' ') - { - printf("创建空节点\n"); - tree = NULL; - }else{ - printf("创建节点 %c\n",c); - tree = (BiTNode *)malloc(sizeof(BiTNode)); - tree->item = c; - tree->lChild = CreateBiTree(); - tree->rChild = CreateBiTree(); - } - - return tree; - -} - - -int PreOrderTraverse(BiTree T){ - - if(T){ - printf("%c\n",T->item ); - PreOrderTraverse(T->lChild); - PreOrderTraverse(T->rChild); - } - - return 0; -} - -int InOrderTraverse(BiTree T){ - - if (T) - { - InOrderTraverse(T->lChild); - printf("%c\n", T->item); - InOrderTraverse(T->rChild); - } - - return 0; -} - -int PostOrderTraverse(BiTree T){ - - if (T) - { - PostOrderTraverse(T->lChild); - PostOrderTraverse(T->rChild); - printf("%c\n",T->item ); - } - - return 0; -} - -// 广度优先遍历 (队列实现) -int LevelOrderTraverse(BiTree T){ - - if (T) - { - Queue queue; - initQueue(&queue); - - BiTree u; - u=(BiTree)malloc(sizeof(BiTNode)); - enQueue(&queue, T); - while(!isEmpty(&queue)) - { - deQueue(&queue, &u); - printf("%c",u->item); - if(u->lChild) - enQueue(&queue, u->lChild); - if(u->rChild) - enQueue(&queue, u->rChild); - } - } - - return 0; -} - - - - int main(int argc, char const *argv[]) -{ - /* code */ - BiTree binaryTree; - - printf("创建二叉树,输入\"空格\"创建空节点(先序方式建立二叉树):\n"); - binaryTree = CreateBiTree(); - if(binaryTree==NULL){ - printf("创建空的二叉树\n"); - } - - - printf("前序遍历:\n"); - PreOrderTraverse(binaryTree); - printf("\n\n"); - - printf("中序遍历:\n"); - InOrderTraverse(binaryTree); - printf("\n\n"); - - printf("后序遍历:\n"); - PostOrderTraverse(binaryTree); - printf("\n\n"); - - printf("层序遍历:\n"); - LevelOrderTraverse(binaryTree); - printf("\n\n"); - - - return 0; -} - - - - - diff --git a/Binary Tree/1-二叉树/btree/btree b/Binary Tree/1-二叉树/btree/btree deleted file mode 100755 index 2ab2e85..0000000 Binary files a/Binary Tree/1-二叉树/btree/btree and /dev/null differ diff --git a/Binary Tree/1-二叉树/btree/public.h b/Binary Tree/1-二叉树/btree/public.h deleted file mode 100644 index 27b6d1f..0000000 --- a/Binary Tree/1-二叉树/btree/public.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// public.h -// DS -// -// Created by mac on 13-9-8. -// Copyright (c) 2013年 xiaoran. All rights reserved. -// - -#ifndef DS_public_h -#define DS_public_h - -//#include -#include "stdlib.h" // 后来,换到mac环境下,#include 应该为 或 #include "stdlib.h" -#include -#include // for memset - - -typedef char ElemType ; // 也可能是一个复杂的复合类型 -typedef int Status; - - - -#define OK 1 -#define ERROR 0 - -typedef int bool; -#define YES 1 -#define NO 0 - -#define DEFAULT_SIZE 10 -#define OUT_OF_BOUND -1 - - -#endif diff --git a/Binary Tree/1-二叉树/btree/队列.h b/Binary Tree/1-二叉树/btree/队列.h deleted file mode 100644 index 220ae46..0000000 --- a/Binary Tree/1-二叉树/btree/队列.h +++ /dev/null @@ -1,175 +0,0 @@ -// -// 队列.h -// 只在一段进行插入,另一端删除元素 -// -// Created by mac on 13-9-8. -// Copyright (c) 2013年 xiaoran. All rights reserved. -// - -#ifndef DS____h -#define DS____h - -#include "public.h" -#include "bintree.c" - -typedef BiTNode ElemType; - -//队列的顺序存储 -typedef struct Node{ - - ElemType *elem; - ElemType *head; - ElemType *tail; - int length; // 当前队列的长度 - int size; // 队列容器的长度,在队列慢得时候可以扩容 - - -}SqQueue; - -// -// 在队列采用顺序存储时,有一个毛病,就是队列操作一段时间后,头指针到了队列容器的尾部,而头指针前面的容器内存不可用了, -//造成内存极大的浪费,这个问题可以通过循环队列来解决。但是在 -// 链式队列上则不存在这样的问题 -// - - -typedef struct QNode{ - - struct QNode *next; - ElemType elem; - -}LinkQueue; - - -// 队列需要维护两个 指针 (队头指针,队尾指针) - -typedef struct{ - - LinkQueue *head; - LinkQueue *tail; - int length; - -}Queue; - - -Status initQueue(Queue *queue);// 带头结点,没有引用传值,就用指针的指针吧 -bool isEmpty(Queue *q); -int length(Queue *q); - - -// 在头部插入,尾部删除 -Status getHead(Queue *q,ElemType *e); -Status enQueue(Queue *q,ElemType e); -Status deQueue(Queue *q,ElemType *e); - -void traveser(Queue *q); - - -Status initQueue(Queue *queue){// 带头结点,没有引用传值,就用指针的指针吧 - - LinkQueue *lq = (LinkQueue *)malloc(sizeof(LinkQueue)); - if (!lq) { - return ERROR; - } - - lq->elem = 0; - lq->next = NULL; - - (queue)->head = (queue)->tail = lq; // -> 优先级高于 * ,老老实实打上括号 - (queue)->length = 0; - - return OK; - -} - -bool isEmpty(Queue *q){ - - return (q->head == q->tail); - -} - -int length(Queue *q){ - -// int ret; -// LinkQueue *p = q->head; -// while (p != q->tail) { -// ret++; -// p = p->next; -// -// } - - return q->length; - -} - -Status getHead(Queue *q,ElemType *e){ - - LinkQueue *p = q->head->next; - if (!p) { - *e=0; - return ERROR; - } - - *e = p->elem; - return OK; - -} - -// 入队(加入到队尾) -Status enQueue(Queue *q,ElemType e){ - - LinkQueue *newNode = (LinkQueue *)malloc(sizeof(LinkQueue)); - if (!newNode) { - return ERROR; - } - newNode->elem = e; - newNode->next = NULL; - q->tail->next = newNode; - q->tail = newNode; - - q->length++; - - return OK; - -} - -//出队(队头). 注意,可能只有1个元素,造成队尾指针丢失 -Status deQueue(Queue *q,ElemType *e){ - - LinkQueue *p = q->head->next; - if (!p) {// 队列空 - return ERROR; - } - - if (e) { - *e = p->elem ; - } - - LinkQueue *temp = p->next; - q->head->next = temp; - if (p == q->tail) { - q->tail = q->head; - } - free(p); - - - q->length--; - - return OK; - -} - - -void traveser(Queue *q){ - - LinkQueue *p = q->head->next; - while (NULL != p) { - printf("%d\n",p->elem); - p=p->next; - } - -} - - - -#endif diff --git a/Binary Tree/1-二叉树/rbtree.c b/Binary Tree/1-二叉树/rbtree.c deleted file mode 100644 index 6e276f7..0000000 --- a/Binary Tree/1-二叉树/rbtree.c +++ /dev/null @@ -1,49 +0,0 @@ -/* -### 红黑树基础 - -一种自平衡的二叉查找树。在每个节点中增加一个存储位表示节点的颜色,可以是red或black - -红黑树比AVL树优秀在哪? - - - - - -5个性质 - -性质1. 节点是红色或黑色。 -性质2. 根是黑色。 -性质3. 所有叶子都是黑色(叶子是NIL节点)。 -性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点) -性质5. 从任一节点到其每个叶子的所有简单路径 都包含相同数目的黑色节点。 - - - -### 红黑树应用 - - -### 存储结构 - - -### 问题与延伸阅读 - - -*/ - -typedef int ElemType - -typedef struct node{ - - int color; - ElemType key; - struct node *lChild,*rChild,*pChild; - -}*RBTree; - - -int rbtree_insert(RBTree *tree,ElemType key); -int rbtree_remove(RBTree *tree,ElemType key); -int rbtree_search(RBTree *tree,ElemType key); - - - diff --git a/Binary Tree/1-二叉树/suffix_tree.c b/Binary Tree/1-二叉树/suffix_tree.c deleted file mode 100644 index 67b05c3..0000000 --- a/Binary Tree/1-二叉树/suffix_tree.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - -### 后缀树(suffix tree)基础 - -又叫后缀trie,与trie最大不同在于:字符串集合由指定的后缀子串组成。 - - -很适合用来操作字符串的子串。 用于字符串的匹配和查询 - - -### 后缀树应用 - - - 从目标串T中判断是否包含模式串P(时间复杂度接近KMP算法); - 从目标串T中查找最长的重复子串; - 从目标串T1和T2中查找最长公共子串; - Ziv-Lampel无损压缩算法; - 从目标串T中查找最长的回文子串; - - - -### 存储结构 - - -### suffix tree 问题与延伸阅读 - -后缀数组 - - -*/ - - - -