数据结构与算法
文章平均质量分 85
录事参军
认真、努力、自强不息
展开
-
二叉树(5)----求二叉树节点数,递归与非递归
1、二叉树定义typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTr原创 2014-12-14 22:44:37 · 4081 阅读 · 1 评论 -
链表(4)----反转链表
1、链表结构定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListEleme原创 2014-12-11 17:21:37 · 1590 阅读 · 0 评论 -
二叉树(2)----中序遍历,递归和非递归实现
1、二叉树定义:typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BT原创 2014-12-14 19:57:59 · 2204 阅读 · 1 评论 -
链表(2)----双链表基本操作
双链表的基本操作原创 2014-12-09 17:45:10 · 1686 阅读 · 0 评论 -
链表(11)----求相交链表的第一个交点
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *he原创 2014-12-12 16:27:49 · 1277 阅读 · 0 评论 -
链表(6)----查找链表中间节点
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListElem原创 2014-12-12 10:43:38 · 2052 阅读 · 0 评论 -
链表(3)----循环单链表基本操作
1、循环链表基本定义typedef struct CListElement_t_{ void *data; struct CListElement_t *next;} CListElement_ttypedef struct CList_t_ { int size; int (*match)(const void *key1,原创 2014-12-09 19:35:51 · 1455 阅读 · 0 评论 -
链表(8)----删除链表的第K个节点,时间复杂度为O(1)
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListEle原创 2014-12-12 14:44:51 · 2759 阅读 · 0 评论 -
链表(12)----判断是否有环,如果有环,判断是6型环,还是0型环
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListE原创 2014-12-12 17:23:52 · 1575 阅读 · 0 评论 -
链表(14)----合并两个有序链表
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListE原创 2014-12-13 22:31:21 · 1459 阅读 · 0 评论 -
链表(1)----单链表基本操作
1、单链表定义单链表元素定义:typedef struct ListElement_t_{ void *data; struct ListElement_t_ *next;} ListElement_t;单链表定义:typedef struct List_t_{ int size; int (*match)(const void原创 2014-12-09 11:19:38 · 2208 阅读 · 3 评论 -
链表(7)----倒序打印链表
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListElem原创 2014-12-12 11:06:26 · 1832 阅读 · 0 评论 -
二叉树(1)----先序遍历(前序遍历),递归和非递归方式实现
1、二叉树节点定义typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; stru原创 2014-12-14 19:00:02 · 5890 阅读 · 0 评论 -
链表(5)----查找链表倒数第K个节点
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; List原创 2014-12-12 10:36:02 · 3309 阅读 · 0 评论 -
链表(9)----判断链表是否有环
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListEle原创 2014-12-12 15:05:29 · 1095 阅读 · 0 评论 -
链表(10)----判断两个单链表是否相交
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListEleme原创 2014-12-12 15:18:23 · 1221 阅读 · 0 评论 -
链表(15)----给定链表中间某个节点,将待插入节点插入给定节点之前
1、 链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; List原创 2014-12-13 22:50:36 · 1989 阅读 · 0 评论 -
链表(16)----删除链表重复元素
算法:先将链表排序,然后遍历链表删除重复元素,时间复杂度为O(NlogN)。原创 2014-12-13 23:23:30 · 1582 阅读 · 1 评论 -
链表总结----链表面试题合集
1、单链表基本操作2、双链表基本操作3、循环单链表基本操作4、反转单链表5、查找单链表倒数第K个节点6、倒序打印链表7、查找链表中间节点8、删除链表第K个节点,平均时间复杂度为O(1)9、判断链表是否有环10、判断两个单链表是否相交11、求相交链表的第一个相交节点12、判断是否有环,并判定是6型环还是0型环13、判断链表是否有环,并求环入口节点1原创 2014-12-13 23:25:00 · 2902 阅读 · 0 评论 -
二叉树(7)----求二叉树叶子节点个数,递归和非递归
1、二叉树定义:typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct B原创 2014-12-15 10:31:55 · 12086 阅读 · 0 评论 -
二叉树(6)----按层遍历二叉树
1、二叉树定义typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTr原创 2014-12-15 10:10:29 · 2991 阅读 · 0 评论 -
二叉树(3)----后序遍历,递归和非递归方式
1、二叉树定义typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTr原创 2014-12-14 21:58:22 · 2335 阅读 · 2 评论 -
链表(13)----判断链表是否有环,并返回环入口节点
1、链表定义typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next;} ListElement_t;typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListE原创 2014-12-13 21:52:04 · 2137 阅读 · 0 评论 -
二叉树----二叉树面试题合集
相关链接:链表总结----链表面试题合集二叉树(1)----先序遍历(前序遍历),递归和非递归方式实现二叉树(2)----中序遍历,递归和非递归实现二叉树(3)----后序遍历,递归和非递归方式二叉树(4)----求二叉树深度,递归和非递归二叉树(5)----求二叉树节点数,递归与非递归二叉树(6)----按层遍历二叉树二叉树(7)---原创 2014-12-19 18:13:36 · 3389 阅读 · 0 评论 -
二叉树(11)----求二叉树的镜像,递归和非递归方式
1、二叉树定义:typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; stru原创 2014-12-16 13:26:45 · 4045 阅读 · 2 评论 -
二叉树(10)----比较两个二叉树是否相同(结构和数据),递归和非递归
1、二叉树定义typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struc原创 2014-12-16 11:41:46 · 10716 阅读 · 2 评论 -
非递归实现二叉查找树的后序遍历
算法描述:步骤一: 从当前节点开始,对当前节点以及它的左子树的所有左节点进行入栈处理,但在入栈过程中不做访问,直到当前节点的最左边的叶子节点为止。步骤二: 当步骤一入栈完毕后,开始出栈,在出栈前先判断栈顶元素是否有右子树,如果没有右子树,直接出栈并访问该节点,并用一个指针记录下当前访问的节点地址信息,直到栈顶元素有右子树为止。步骤三:原创 2013-09-20 11:25:40 · 790 阅读 · 0 评论 -
非递归实现二叉查找树
1、头文件:#ifndef _TREE_NONRECUR_H_#define _TREE_NONRECUR_H_typedef struct stack_record* stack;typedef struct link_node* Node;typedef struct treenode* searchtree;typedef searchtree element原创 2013-09-01 16:52:08 · 896 阅读 · 0 评论 -
使用数组实现队列
一、h文件:my_que.h#ifndef _MY_QUE_H_#define _MY_QUE_H_struct QueRecord;typedef struct QueRecord* queue;typedef int element_type;int IsEmpty(queue q);int IsFull(queue q);queu原创 2013-08-26 21:50:57 · 1035 阅读 · 0 评论 -
递归实现二叉查找树
一、头文件:#ifndef _BIN_TREE_TEST_#define _BIN_TREE_TEST_struct treenode;typedef struct treenode* searchTree;typedef int elementType;searchTree MakeEmpty(searchTree t);searchTree Find(elementTy原创 2013-08-28 14:48:25 · 1065 阅读 · 0 评论 -
用链表实现栈
一、头文件:#ifndef _STACK_LINK_H_#define _STACK_LINK_H_struct stack_record;typedef struct stack_record* stack;typedef int elementType;struct link_node;typedef struct link_node node;int IsEmpty(s原创 2013-08-27 16:53:34 · 1095 阅读 · 0 评论 -
用数组实现栈
hangma@ubuntu:~/test/test/protest/stack_test$ cat my_stack.h原创 2013-08-27 10:31:42 · 937 阅读 · 0 评论 -
使用链表实现队列
一、头文件 que_link.h#ifndef _QUE_LINK_H_#define _QUE_LINK_H_struct que_record;typedef struct que_record* que;struct link_node;typedef struct link_node* node;typedef int elementType;原创 2013-08-26 21:30:58 · 1050 阅读 · 0 评论 -
二叉树(8)----求二叉树第K层的节点数和二叉树第K层的叶子节点数,递归方式和非递归方式
1、二叉树定义typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BT原创 2014-12-15 11:12:40 · 12744 阅读 · 1 评论 -
二叉树(9)----打印二叉树中第K层的第M个节点,非递归算法
1、二叉树定义:typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct B原创 2014-12-15 13:43:00 · 2639 阅读 · 0 评论 -
二叉树(12)----查找两个节点最低祖先节点(或最近公共父节点等),递归和非递归
1、二叉树定义:typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; stru原创 2014-12-16 23:37:07 · 11763 阅读 · 1 评论 -
二叉树(16)---- 一个二叉树是否包含另一个二叉树
2、问题描述二叉树A和B的每个节点的数据(int型数据)存储在不同文件中,存储方式为前序遍历和中序遍历,根据这两种遍历重建二叉树,并且判断二叉树A是否包含二叉树B。3、算法描述(1)首先将节点数据的前序遍历和中序遍历序列读入数组(2)分别根据各自的前序遍历和中序遍历重建二叉树A和B(3)判断B是否在A中代码:#include #include #includ原创 2014-12-30 13:34:42 · 1690 阅读 · 1 评论 -
栈(2)----用数组实现栈
1、基本定义typedef struct StackElement_t_ { void *data;} StackElement_t;typedef struct Stack_t_ { int size; int capacity; int (*destroy)(void *data); int top_index; StackElemen原创 2014-12-11 09:51:49 · 593 阅读 · 0 评论 -
栈(1)----用链表实现栈
一、定义typedef struct StackElement_t_{ void *data; struct StackElement_t *next;} StackElement_t;typedef struct Stack_t_ { int size; int capacity; int (*destory)(void *data);原创 2014-12-10 16:36:09 · 783 阅读 · 0 评论 -
队列(2)----用数组实现队列
1、定义typedef struct QueElement_t_ { void *data;} QueElement_t;typedef struct Que_t_{ int size; int capacity; int head; int tail; int (*destroy)(void *data ); QueElement原创 2014-12-11 12:54:57 · 829 阅读 · 1 评论