哈夫曼树及n皇后 目录哈夫曼树:n皇后问题:哈夫曼树:定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。构建步骤如下: 1、将给定的n个权值看做n棵只有根节点(无左右孩子)的二叉树,组成一个集合HT,每棵树的权值为该节点的权值。 2、从集合HT中选出2棵权值最小的二叉树,组成一棵新的二叉树,其权值为这2棵二叉树的权值之和。 3、将步骤2中选出的2棵二叉树从集合HT中删去,同时将步骤2中新得到的二叉树加入到集合HT中...
二叉树的构建与遍历 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。根结点:根节点没有前驱结点。除根节点外,其余结点被分成是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。因此,树是递归定义的。节点的度:一个节点含有的子树的个数称为该节点的度;叶节点:度为0的节点称为叶节点;非终端节点或分支节点:度不为0的节点;双亲节点或父节点:若一个节点含有子节点,则这个节点称
矩阵乘法&压缩矩阵的转置 目录矩阵乘法:压缩矩阵的转置:矩阵乘法:1、定义三个二维数组来存储第一个矩阵、第二个矩阵和相乘后得到的新矩阵。2、对第一个、第二个矩阵的每个进行赋值(要注意的是我们需要让第一个矩阵的列数等于第二个矩阵的行数),然后将其打印出来。3、使用for循环语句,先遍历第二个矩阵的第j列的每一个元素,然后将其与第一个元素的第i列的每一个元素进行相乘并相加。将其运算后的结果放在对应第i行第j列的新数组中。4、再利用for循环将得到的新数组进行一个元素一个元素的输出。#incl...
链队列、循环队列 队列的定义:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。链队列:代码:#include <stdio.h>#include <malloc.h>typedef struct LinkNode{ int data; LinkNode* next;}*LinkNodePtr;.
——递归及汉诺塔问题 递归:int addTo(int paraN) { int tempSum; printf("entering addTo(%d)\r", paraN); if (paraN <= 0) { printf(" return 0\r"); return 0; } else { tempSum = addTo(paraN - 1) + paraN; printf(" return %d\r", tempSum); return tempSum; }}
栈及栈的应用-(括号匹配、表达式求值) 栈的定义:栈是一种“先进后出”的一种数据结构,有压栈出栈两种操作方式。定义结构体:typedef struct CharStack { int top; int data[STACK_MAX_SIZE]; } *CharStackPtr;输出堆栈:void outputStack(CharStackPtr paraStack) { for (int i = 0; i <= paraStack->top; i ++) { p.
多项式加法 结构体定义:typedef struct LinkNode{ int coefficient; int exponent; struct LinkNode *next;} *LinkList, *NodePtr;初始化链表:LinkList initLinkList(){ LinkList tempHeader = (LinkList)malloc(sizeof(struct LinkNode)); tempHeader->coefficient = 0; tempHea
---双向链表 双向链表定义:双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。1、初始化链表typedef struct doublelinkednode{ char data; struct doublelinkednode*previous; struct doublelinkednode*next;}dlnode,*dlnodeptr;
——静态链表 定义:静态链表就是借助数组来描述线性表的链式存储结构,此时的数组的分量就是我们自己定义的结构体,数组中的一个分量表示一个结点,同时用游标代替指针描述结点在数组中的相对位置,即数组的分量形式是结点+游标。此外,数组的第0个分量可以看成链表中的头结点,其游标即链表中的指针域则就指向链表的第一个结点。 游标 0 1 2 3 4 ······ ····.
2.2单链表 1、引入库typedef struct LinkNode{ char data; struct LinkNode *next;}LNode,*LinkList,*NodePtr;初始化列表,建立头节点LinkList initLinkList(){ NodePtr tempHeader = (NodePtr)malloc(sizeof(LNode)); tempHeader->data='\0'; tempHeader->next = NULL; return te
【无标题】 老师的原代码:#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 fi.