数据结构与算法
1100022702
这个作者很懒,什么都没留下…
展开
-
双向链表的实现
/* 单链式存储结构中,只有一个指向后继的指针,从某点出发,只能顺序的访 访问,如果想访问上一个结点必须从头开始,时间复杂度:访问下一个结点 为O(1),访问上一个结点为O(n)而双向链表可以克服这个问题 双向链表的结点存在一个数据域和两个指针域:一个指向前驱一个指向后继 */ #include #include typedef int ElemType;原创 2015-02-13 17:37:10 · 323 阅读 · 0 评论 -
排序算法
一、插入排序 1.直接插入排序 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。 即先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 void insertSort(int *array, int len) { for (int i = 1; i < len; i原创 2015-03-27 16:30:53 · 658 阅读 · 0 评论 -
二叉树的遍历
#include #include #include #include #include using namespace std; typedef int ElemType; typedef struct BTNode { ElemType data; struct BTNode *left; struct BTNode *right; }BTNode,原创 2015-03-03 09:43:57 · 438 阅读 · 0 评论 -
二叉树题目小结
1. 求二叉树中的节点个数 2. 求二叉树的深度 3. 前序遍历,中序遍历,后序遍历 4. 分层遍历二叉树(按层次从上往下,从左往右) 5. 将二叉查找树变为有序的双向链表 6. 求二叉树第K层的节点个数 7. 求二叉树中叶子节点的个数 8. 判断两棵二叉树是否结构相同 9. 判断二叉树是不是平衡二叉树 10. 求二叉树的镜像 11. 判断二叉树是不是完全二叉树 二叉原创 2015-04-15 15:19:56 · 594 阅读 · 0 评论 -
静态链表的实现
/* 静态链表用一维数组表示链表便于在不设指针的高级程序语言中实现链表结构 数组的一个分量表示一个结点,一个结点由两个域组成: 数据域:data,用于存储要处理的数据元素 游标域:cur,用于代替指针指示结点在数据中的位置 特殊处理数组的第一个位置与最后一个位置 最后一个位置的游标指标第一个有数据的结点(相当于链表的头结点) 第一个位置的游标指标一个未使用的结点 */#include转载 2015-02-14 22:47:07 · 362 阅读 · 0 评论 -
约瑟夫问题
#include #include typedef struct Node { int data; struct Node *next; }Node, *PNode; int main() { int i, N, M; printf("请输入人数N: "); scanf("%d",&N); printf("请输入报数M: "); scanf("%d",&M); PNod原创 2012-08-28 19:26:03 · 319 阅读 · 0 评论 -
链式队列的实现
#include #include typedef int ElemType; typedef struct Node{ ElemType data; struct Node *next; }QueueNode; typedef struct { QueueNode *front; QueueNode *rear; }Queue; void Init(Queue *q); bo原创 2015-02-19 20:15:18 · 306 阅读 · 0 评论 -
顺序栈的实现
#include #include #define INFINITY 65535 #define MAXSIZE 100 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int top; }Stack; void Init(Stack *s); bool IsEmpty(Stack *s); ElemT原创 2015-02-18 14:49:18 · 314 阅读 · 0 评论 -
KMP算法的实现
#include #include #include void GetNext(const char *sub, int *next) { int slen = strlen(sub); int k = 0; next[0] = 0; for (int i = 1; i < slen; ++i) { while (k > 0 && sub[i] != sub[k])原创 2015-02-21 22:01:17 · 275 阅读 · 0 评论 -
顺序循环队列的实现
#include #include #define MAXSIZE 10 typedef int ElemType; typedef struct{ ElemType data[MAXSIZE]; int front; int rear; }Queue; void Init(Queue *q); bool IsEmpty(Queue *q); void Enter(Queue *原创 2015-02-19 21:27:15 · 768 阅读 · 0 评论 -
链式栈的实现
#include #include #define INFINITY 65535 #define MAXSIZE 100 typedef int ElemType; typedef struct Node{ ElemType data; struct Node *next; }StackNode, *Stack; void Init(Stack *s); bool IsEmpty原创 2015-02-19 13:10:34 · 274 阅读 · 0 评论 -
单链表的实现
/* ******************************************************************************* 用链接存储方式存储的线性表——链表,可以克服顺序表的插入与删除时间复杂度为O(n)缺点。 但其获知表长与访问元素的时间复杂度O(n)较顺序表O(1)比较变差了 比较适合频繁进行插入与删除操作,访问操作较少的情况 链表中的结点用原创 2015-02-13 12:22:22 · 396 阅读 · 0 评论 -
链表题目小结
1. 求单链表中节点的个数 2. 将单链表反转 3. 查找单链表中的倒数第K个节点(k > 0) 4. 查找单链表的中间节点 5. 从尾到头打印单链表 6. 已知两个单链表pHead1 和pHead2 各自有序,把它们合并成一个链表依然有序 7. 判断一个单链表中是否有环 8. 判断两个单链表是否相交 9. 求两个单链表相交的第一个节点 10. 已知一个单链表中存在环,求进入环中原创 2015-04-19 22:14:52 · 594 阅读 · 0 评论