- 博客(14)
- 收藏
- 关注
原创 哈夫曼树的理解
给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,则称该二叉树为哈夫曼树,也被称为最优二叉树。我们首先需要清楚这样一个问题:用n个数据所构建出来的哈夫曼树,生成的哈夫曼编码的长度最长是多少? 因为哈夫曼编码是根据从根结点到该叶子结点的路径所确定的一个编号,所以生成的哈夫曼编码最长的叶子结点一定是离根结点最远的结点。要使叶子结点里根结点达到最远,那么生成的哈夫曼树应该是斜二叉树。该斜二叉树中最后一层的叶子结点所生成的哈夫曼编码就是最长的,其哈夫曼编码的长度就是从根结点到达该
2022-05-29 19:44:30
73
原创 N皇后问题
由于皇后的位置受到上述三条规则约束,我们必须通过一些技术手段来判断当前皇后的位置是否合法。1.皇后的编号从 0 ~ N - 1 (N表示皇后的数量),这样编号的想法很简单:数组下标从0开始(这样方便后续对其位置的说明)。2.使用一维数组 putInf 对每一行皇后的存放位置进行保存,因此得到解向量 (putInf[0], putInf[1], putInf[3], … , putInf[N - 1]),putInf[i] 表示第 i 个皇后被放置到了第 putInf[i] + 1 列上(putInf
2022-05-29 19:42:34
88
原创 二叉树的构建与遍历
1. 二叉树的定义二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。2. 二叉树的遍历二叉树的存储分为顺序存储和链式存储 。顺序存储在右斜树这种极端情况下,会十分浪费存储空间,顺序存储结构一般适用于完全二叉树。因此二叉树的存储一般会使用链式存储一、结构体的定义typedef struct BTNode{ char element; BTNode* left; BTNode* ri
2022-05-24 22:28:15
140
原创 压缩矩阵的转置
#include<iostream>#include<cstdlib>#include<cstdio>#define MAXSIZE 12500 typedef struct{ int i,j; int e;}Triple; typedef struct{ Triple data[MAXSIZE+1]; int mu,nu,tu; //存储矩阵的行数、列数、非零元个数 }TSMatrix; void input(TSMatrix &a..
2022-05-19 21:39:31
70
原创 数据结构——二维数组和矩阵乘法
1、首先我们要定义三个二维数组来存储第一个矩阵、第二个矩阵和相乘后得到的新矩阵。2、对第一个、第二个矩阵的每个进行赋值(要注意的是我们需要让第一个矩阵的列数等于第二个矩阵的行数),然后将其打印出来。3、使用for循环语句,先遍历第二个矩阵的第j列的每一个元素,然后将其与第一个元素的第i列的每一个元素进行相乘并相加。将其运算后的结果放在对应第i行第j列的新数组中。4、再利用for循环将得到的新数组进行一个元素一个元素的输出。#include<iostream>using name.
2022-05-19 21:38:18
663
原创 队列(数据结构)
队列,一种特殊的线性表它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。特点:只允许在一端输入,在另一端输出。输入端称为队尾,输出端称为队头因此,队列,又称为先进先出表,类似于生活中的排队,先来的排在前头,后来的排在后头,一个一个办理业务。队列有两种,一种叫做循环队列,另一种叫做链式队列。1.结构体的定义typedef struct LinkNode{ int da
2022-05-17 19:07:19
210
原创 递归(汉诺塔问题)
1.输入数字int addTo(int paraN) { int tempSum; printf("entering addTo(%d)\r\n",paraN); if(paraN<=0){ printf(" 请你输入正确的数字\r\n"); return 0; } else{ tempSum = addTo(paraN -1)+paraN; printf(" return %d\r\n",tempSum); return tempSum; } //
2022-05-12 21:29:40
44
原创 栈的应用.
定义节点typedef struct CharStack{ int top; int data[MAXSIZE];}*CharStackPtr;栈的初始化CharStackPtr charStackInit() { CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(struct CharStack)); resultPtr->top = -1; return resultPtr;}入栈void p
2022-05-10 21:13:22
114
原创 栈....
压栈void push(CharStackPtr paraStackPtr, int paraValue) { // Step 1. Space check. if (paraStackPtr->top >= MAXSIZE - 1) { printf("Cannot push element: stack full.\r\n"); return; }//Of if // Step 2. Update the to
2022-05-10 21:06:35
42
原创 多项式的加法
创建链表typedef struct LinkNode{ int coefficient;//系数 int exponent; struct LinkNode *next; } *LinkList, *NodePtr;创立头节点LinkList initLinkList(){ LinkList tempHeader = (LinkList)malloc(sizeof(struct LinkNode)); tempHeader->coefficient = 0;
2022-05-06 20:14:34
50
原创 2.4静态链表
静态链表的定义typedef struct StaticLinkedNode{ char data; int next;} *NodePtr;typedef struct StaticLinkedList{ NodePtr nodes; int* used;} *ListPtr;静态链表的初始化ListPtr initLinkedList(){ ListPtr tempPtr = (ListPtr)malloc(sizeof(StaticLinkedList));
2022-05-03 19:06:48
64
原创 2.3 双向链表
#include <stdio.h>#include <malloc.h> typedef struct DoubleLinkedNode{ char data; struct DoubleLinkedNode *previous; struct DoubleLinkedNode *next;} DLNode, *DLNodePtr; DLNodePtr initLinkList(){ DLNodePtr tempHeader = (DLNodePtr)ma.
2022-05-03 18:59:47
55
原创 单链表2-2
typedef struct LinkNose{ char data; struct LinkNode *next;} LNode, *LinkList, *NodePtr;建立一个单链表LinkList initLinkList(){ NodePtr tempHeader = (NodePtr)malloc(sizeof(LNode));//在空间里找到一个地址,把这个地址赋值给L tempHeader->data = '\0'; tempHeader->next .
2022-04-29 23:41:26
87
1
原创 数据结构 顺序表
#include <stdio.h>#include <malloc.h>#define LIST_MAX_LENGTH 10/** * Linear list of integers. The key is data. */typedef struct SequentialList { int actualLength; int data[LIST_MAX_LENGTH]; //The maximum length is fixed.} *Se.
2022-04-26 21:39:23
80
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人