自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 树的同构啊

input:8A 1 2B 3 4C 5 -D - -E 6 -G 7 -F - -H - -8G - 4B 7 6F - -A 5 1H - -C 0 -D - -E 2 -output:Yes(测试数据对应图1)#include<stdio.h>#include<stdlib.h>typedef struct node{ char data; int l; int r;}tree;tree T1[...

2021-10-14 22:09:28 53

原创 哈夫曼编码

字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码。哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%~90%之间。你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼编码长度的比值。输入数据有多组,每组数据一行,表示要编码的字符串。对应字符的ASCII编码长度la,huffman编码长度lh和la/lh的值(保留一位小数),数据之间以空

2021-10-06 12:34:29 481

原创 (中序后序)求二叉树的深度

已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。输出二叉树的深度。2dbgeafcdgebfcalnixulinux43#include<stdio.h>#include<string.h>#include<stdlib.h>char lat[55], ino[55];typedef struc

2021-10-06 12:32:08 237

原创 (先序中序)还原二叉树

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。输出一个整数,即该二叉树的高度。9ABDFGHIECFDHGIBEAC5#include<stdio.h>#include<string.h>#include<stdlib.h>typedef

2021-10-06 12:30:28 379

原创 KMP简单应用

给定两个字符串string1和string2,判断string2是否为string1的子串。输入包含多组数据,每组测试数据包含两行,第一行代表string1(长度小于1000000),第二行代表string2(长度小于1000000),string1和string2中保证不出现空格。对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。#include<stdio.h>#include<string.h>#

2021-10-06 12:27:28 44

原创 哈夫曼编码

#include <stdio.h>#include <stdlib.h>#include <string.h>void sqort(int a[], int l,int r){ int i, j, key; i = l; j = r; key = a[l]; if(l >= r) return; while(i < j) { while(i < j&am.

2021-10-03 11:03:06 49

原创 统计叶子数

题目描述:已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。//同样省略建立二叉树的过程 见->遍历二叉树int count = 0;void LeafNum(BiTree T){ if(T){ if(T->lc == NULL && T->rc == NULL) count ++; LeafNum(T->lc);

2021-10-03 10:25:08 84

原创 层序遍历二叉树

题目描述:已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。//建立二叉树的过程已在 文章:遍历二叉树 中写过,在这里就省略了void LevelOrder(BiTree T){ InitQueue(Q); //初始化辅助队列 BiTree p; EnQueue(Q, T); //将根结点入队 while(!IsEmpty(Q)){ //队列不空则循环 DeQueue(Q, p); //队头

2021-10-03 10:10:48 59

原创 遍历二叉树

题目描述: 已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。char str[55]; //存放字符串int i = 0; //遍历字符串void CreateTree(BiTree &T) //建立二叉树{ if(str[i] == ',') { i ++; T = NULL; } else { T = (BiTre

2021-10-03 09:50:17 49

原创 E-单链表的拆分

题目描述:输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。#include<stdio.h>#include<stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;void CreateList(LinkList &L, int n){

2021-09-11 12:55:48 114

原创 D-有序链表的归并

题目描述:分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。#include<stdio.h>#include<stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;void CreateList(LinkList &L, int n){

2021-09-11 12:53:47 60

原创 C-链表的逆置

题目描述:输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据。#include<stdio.h>#include<stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;void CreateList(LinkList &L){ L = (LinkList)malloc(s

2021-09-11 12:51:50 120

原创 B-逆序建立链表

#include<stdio.h>#include<stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;void CreateList(LinkList &L, int n){ L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; LinkList p; f

2021-09-11 12:44:46 46

原创 A-顺序建立链表

#include<stdio.h>#include<stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;void CreateList(LinkList &L, int n){ L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; LinkList p, q;

2021-09-11 12:43:08 47

原创 G-最大子段和之动态规划法

int Maxsum(SqList &L, int n){ int thissum, sum; thissum = sum = 0; for(int i = 0; i < n; i ++) { thissum = thissum + L.elem[i]; if(thissum < 0) thissum = 0; else if(thissum > sum) sum

2021-09-10 15:30:26 43

原创 F-最大子段和之分治递归法

题目描述:本题目要求用分治递归法求解,除了需要输出最大子段和的值之外,还需要输出求得该结果所需的递归调用总次数。int count = 0;int Max(int a, int b){ if(a > b) return a; else return b;}int Maxsum(SqList &L, int l, int r){ count ++; int i, sum; int leftsum, rightsum; if(l == r)

2021-09-10 15:28:53 63

原创 E-有序顺序表查询-二分查找

//二分查找int Find(SqList &L, int x, int l, int r){ while(l <= r) { int mid =(l+r)/ 2; if(x < L.elem[mid]) r = mid-1; else if(x > L.elem[mid]) l = mid+1; else return mid

2021-09-10 15:00:56 139

原创 D-有序顺序表归并

void Merge(SqList &LA, SqList &LB, SqList &LC){ int i, j, k; i = j = k = 0; while(i < LA.length && j < LB.length) { if(LA.elem[i] < LB.elem[j]) { LC.elem[k] = LA.elem[i]; k ++; i ++;

2021-09-10 14:51:22 60

原创 C-元素位置互换之逆置算法

题目描述:一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N)、空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段。void Exchange(SqList &L, int l, int r){ int t; while(l < r) {

2021-09-09 18:08:28 47

原创 B-多余元素删除之建表算法

void Create(SqList &L, int m) //m为数据元素的个数{ int i, j, x; L.length = 0; for(i = 0; i < m; i ++) { scanf("%d", &x); for( j = 0; j < L.length; j ++) { if(x == L.elem[j]) break;

2021-09-09 17:54:00 49

原创 A-多余元素删除之移位算法

多余元素删除之移位算法#include<stdio.h>typedef struct{ int *elem; int length; int listsize;}SqList;void InitList(SqList &L){ L.elem = new int[10005]; L.listsize = 10005; L.length = 0;}void Create(SqList &L, int m){ f

2021-09-09 17:44:28 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除