- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 快速排序
//快速排序之获得点int QSort(int *a, int i, int j){ a[0] = a[i];//将与之比较的点 while (i<j) { while (i<j&&a[0]<a[j])//找到比他小的第一个点 { j--; } if (a[0] > a[j])//如果
2017-07-28 16:05:51 176
原创 折半插入排序
折半插入的本质上,依旧是插入排序,只是在寻找插入点的时候将使用折半查找,用以减少查找数据的次数。数组的第0个元素不在排序序列中,用来保存将要插入的数据。//折半直接插入排序void BinsrySort(int *a, int length){ //第0号元素不使用 for (int i = 1; i < length; i++) { a[0] = a[i
2017-07-28 15:17:42 227
原创 直接插入排序
//直接插入排序void InsertSort(int *a,int length){//0,11,1,2,3,7,8,9,4,5,6,10 //0号元素不使用 for (int i = 2; i < length; i++) { a[0] = a[i]; int j = i - 1; while(j>0&&a[0]<a[j
2017-07-28 14:59:47 149
原创 折半查找
查找 5 成功查找失败high比low小,则查找失败//折半查找typedef struct{ int num;}student;typedef struct{ int length; student st[MAX + 1];}student_t;int Binary_Search(student_t st_t, student st){ int lo
2017-07-26 18:00:45 175
原创 线性查找
//线性查找//将第0个元素,做为防止越界的标记//从后往前查typedef struct { int num;}student;typedef struct{ int length; student st[MAX+1];}student_t;int search1(student_t st,int flag){ int i = st.length;
2017-07-26 17:47:30 280
原创 二叉排序树创建、查找、删除
一、二叉树的结构体结构typedef struct tree{ int date; tree *lchild; tree *rchild;}tr_t;二、二叉排序树的创建void creat_BStree(tr_t ** tr,int num){ if ((*tr) == NULL) { (*tr) = (tree*)malloc(s
2017-07-26 17:46:09 414
原创 输出二叉树中叶子结点的个数
int leaf(tree * root){ if (root == NULL)//如果根节点为空,则返回空 return 0; else if (root->lchild == NULL&&root->rchild == NULL)//如果左孩子和右孩子同时为空,则叶子节点的数加+1 return 1; else retur
2017-07-24 10:19:16 7702 3
原创 二叉树按层遍历输出——双指针法(图解)
(一)申请一个vector的容器vt。 (二)设置两个指针(当然,不是必须是指针形式的指针,可以用数组的下标代替,只是采用指针这个思想),这两个指针一个指向当前访问的节点——cur(标志目前访问的是哪个节点),另外一个指向当前层访问节点的最后一个节点——end(标志当前层访问结束)。 (三)对两个指针的初始化:首先在根节点不为NULL的情况下,将根节点装入容器,然后cur从0开始,end等于容器
2017-07-24 09:59:41 1323
原创 判断两棵二叉树是不是相同
(一)在左右节点不可以旋转的时候://核心代码,先确定根节点是否相同,再判断左孩子和右孩子是否相同。bool equal(tree *root ,tree *root1){ if (root == NULL&&root1 == NULL) { return 1; } if (!root || !root1 ) { retur
2017-07-23 19:24:58 515
原创 哈夫曼树
(一)基础知识 路径:从一个结点到另一个结点之间的分支序列。 路径长度:从一个结点到另一个结点所经过的分支数目。 结点的权:根据应用的需要可以给树的结点赋权值 带权路径长度:从根到该结点的路径长度与该结点权的乘积。 树的带权路径长度: 树中所有叶子结点的带权路径之和。 哈夫曼树:由n个带权叶子结点构成的所有二叉树中带权路径长度最短的二叉树。又叫最优二叉树。(二)有数据为{ 22,10,4
2017-07-22 21:48:42 454
原创 由前序遍历和中序遍历,求后序遍历
若已知一棵二叉树的前序序列是 B E F C G D H, 中序序列是 F E B G C H D ,则它的后序序列_。前序遍历:先遍历根节点,再遍历左孩子,最后遍历右孩子。 中序遍历:先遍历左孩子,再遍历根节点,最后遍历右孩子。所以,遍历的序列也是这个规律。首先,看前序遍历中B节点,它是第一个节点,也是根节点;再看中序遍历,B节点将中序遍历分为两部分,第一部分为FE,第二部分为GCHD。FE是
2017-07-21 20:00:40 708
原创 二叉树
一、二叉树的结构typedef struct tree{ char date; tree *lchil; tree *rchil;}tree;二、二叉树的创建void create_tree(tree **root){//if (root != NULL) { char put = ' '; scanf("%c", &put);
2017-07-20 17:44:16 141
原创 括号{}()[]匹配
使用栈来实现#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100typedef struct elem{ int date;};typedef struct LinkStack{ elem elem_date; LinkStack *next;}LinkStack;//初始化vo
2017-07-20 15:02:33 286
原创 全部输入是小括号的字符串,判断是否匹配
#include<stdio.h>#include<stdlib.h>#define MAX 50bool pipei(char * a){ int i = 0; int result = 0; while (a[i] != '\r'&&a[i]!='\n') { if (a[i] == '(') { res
2017-07-20 14:23:58 1357 1
转载 卡特兰数证明
1.饭后,姐姐洗碗,妹妹把姐姐洗过的碗一个一个地放进碗橱摞成一摞。一共有n个不同的碗,洗前也是摞成一摞的,也许因为小妹贪玩而使碗拿进碗橱不及时,姐姐则把洗过的碗摞在旁边,问:小妹摞起的碗有多少种可能的方式? 2.给定n个数,有多少种出栈序列? 3.一个有n个1和n个-1组成的字串,且前k个数的和均不小于0,那这种字串的总数为多少?这三个问题具有相同的结构,三个问题是可以互相转化。将姐姐放碗看做入
2017-07-20 08:03:47 387
原创 图书馆里有没有某本书,现有6人排队,有3个人来借此书,3个人来还此书,且若到某人借书时,若无书,则立即离开,多少种排队方法能借到书?
#include<stdio.h>#include<stdlib.h>#define SUM 6int state[SUM];//1代表还书 -1代表借书//void book(int book_lend,int book_return,int num,int count){ //算法结束的条件是:借书的人都借到了,即book_lend==0 if (book_lend
2017-07-19 17:41:27 911
原创 两个栈实现队列的功能。(外部接口是队列)
#include<stdio.h>#include<stdlib.h>//栈typedef struct Stack{ int date; Stack *next;}Stack;//队列typedef struct Queue{ Stack *front; Stack *tail;}Que;//栈的初始化void Init_stack(Stack **
2017-07-19 17:40:26 190
原创 链式队列的基本操作(配图)
一、结构体结构队列中储存的内容,本身是一个链表 队头和队尾只是指向这个链表的两个指针,这样就可以使用两个指针控制访问的事件typedef struct elem{ int date; elem *next;}elem;typedef struct queue{ elem *tail; elem *head;}queue;二、初始化下图是初始化完结构体的样子v
2017-07-18 23:23:41 9696
原创 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
void delete_two(node *other){ if (other != NULL) { node *q = (node *)malloc(sizeof(node)); q = other->next; other->next = q->next; other->date = q->date;
2017-07-17 22:49:53 608
原创 单链表的简单操作
typedef struct Node{ int date; struct Node *next;}node;//链表的初始化void Init(node **head){ if (*head != NULL) { node * p = (node*)malloc(sizeof(node)); p->next = NULL;
2017-07-17 21:56:06 209
原创 冒泡排序简单改进
int main(void){ int a[] = {0,1,2,3,4,5,6,7,8,9}; bool temp = true; for (int i = 0; i < 9; i++) { temp = false;//首先将其置为false for (int j = 0; j < 9 - i; j++) {
2017-07-17 21:51:51 141
原创 利用链表的头插法,将链表逆序
while(旧链表不为空) { 第一步: 将旧链表从第二个有效数据保存下来到NEXT链表中。 第二步: 将旧链表中的NEXT置为空。 第三步: 将第二步中的链表赋值给新链表的NEXT。 第四步: 将第一步保存的链表赋值给旧链表中,用以循环。 }
2017-07-17 21:28:32 2344
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人