![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构
算法与数据结构
有品位的程序员
这个作者很懒,什么都没留下…
展开
-
哈夫曼树算法实现并输出每个字符的哈夫曼编码
#include<stdio.h>#define n 5#define m (2*n-1) //结点总数#define maxval 10000.0#define maxsize 100 //哈夫曼编码的最大位数typedef struct{ char ch; float weight; int lchild,rchild,parent;}hufmtree;typedef struct{ char bits[n]; //位串 int start;原创 2020-07-02 09:03:55 · 11829 阅读 · 1 评论 -
顺序表的初始化、建立、求表长、输出、插入、查找、删除等操作
#include<stdio.h>#define MAXSIZE 10typedef int Status; //函数结构状态码 0-失败; 1-成功typedef int ElemType;typedef struct{ ElemType data[MAXSIZE]; int length;}SqList;//顺序表操作的函数声明void InitList(SqList *LP);原创 2020-06-23 21:20:34 · 3736 阅读 · 0 评论 -
【09】查找
1.查找的概述(1)查找查找又称为查询或检索,是在一批记录中依据一个给定的key值,找出相应记录的操作。(2)查找表由同一类型的数据元素(或记录)构成的集合。(3)关键字记录中某个数据项的值,可用来识别一个记录。主关键字:可以唯一标识一个记录的关键字次关键字:识别若干记录的关键字(4)静态查找若只对查找表进行:查询:查询某个特定的数据元素是否在查找表中;检索:检索某个特定元素的各种属性。则称这类查找为静态查找。只查找,不改变数据元素集合内的数据元素。(5)动态查找若在查找过程原创 2020-06-13 15:10:03 · 612 阅读 · 0 评论 -
【08】排序 深度分析几种排序特性
排序1.直接插入排序2.希尔排序3.冒泡排序4.快速排序5.选择排序6.堆排序7.归并排序1.直接插入排序算法思路: 每趟将一个待排序的关键字按照其值的大小插入到已经排好的部分有序序列的适当的位置上,直到所有待排的关键字都被插入到有序序列中为止。代码模板:for (从第二个数据开始对所有数据循环处理){if (第i个数据小于它之前的第i-1个数据){➀ 将第i个数据复制到一个空闲空间临时存储,这个空间为“哨兵”➁ 在前i-1个数据中寻找合适的位置,将从该位置开始的元素全部后移➂ 将哨兵数原创 2020-06-11 23:45:54 · 416 阅读 · 0 评论 -
【07】图的遍历和图的应用
遍历定义:从已给的连通图中某一顶点出发,沿着一些边(弧),访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。图的遍历策略:广度优先遍历、深度优先遍历。图的深度优先遍历:思想:访问起始点 v;若v的第1个邻接点没访问过,深度遍历此邻接点;若当前邻接点已访问过,再找v的第2个邻接点重新遍历。从图中某个顶点v0出发,访问顶点v0。访问顶点v0的第一个邻接点,然后以该邻接点为新的顶点,访问该顶点的邻接点。重复执行以上操作,直到当前顶点没有邻接点为止。返回到上一个已经访问原创 2020-06-04 21:17:41 · 593 阅读 · 0 评论 -
【07】图的数据结构
一、邻接矩阵的定义逻辑结构分为两部分:V和E集合,其中,V是顶点,E是边。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。(1)无向图的邻接矩阵(2)有向图的邻接矩阵特点:有向图邻接矩阵不一定对 称;有向图中 : 顶点 vi 的出度是邻接矩阵中第 i 行中 1 的个数。顶点 vi 的入度是邻接矩阵中第 i 列中 1 的个数。(3)网的邻接矩阵2.邻接矩阵复杂度分析(1)时间复杂度边查找:对于查找图中任两个顶点i和原创 2020-05-29 15:03:05 · 917 阅读 · 0 评论 -
【07】图的概念及性质
1.1图的定义一个图(Graph)是一个序偶<V, E>,记为G = <V, E> 其中:(1)V = {v1, v2, …, vn}是有限非空集合,vi称为顶点,V称为结点集。(2)E是有限集合,称为边集。E中的每个元素都是V中顶点偶对,称之为边。注意:1.2图的基本术语1.无向边若顶点vi,vj之间的边没有方向,则称这条边为无向边,用圆括号表示为(vi,vj))或(vj,vi),两个表示相同。2. 无向图如果图中任意两个顶点之间的边都是无向边,则称该图为无向图原创 2020-05-29 09:51:18 · 884 阅读 · 0 评论 -
【06】先序遍历建立二叉树,并进行三种遍历
main函数int main(){ Bitree* T=NULL; printf("输入二叉树的先序遍历结点,建立二叉树。(子树为空时输入@)\n"); T=CreateBtree_DLR(T); printf("\n先序遍历的结果:\n"); PreOrder(T); printf("\n中序遍历的结果:\n"); InOrder(T); printf("\n后序遍历的结果:\n"); PostOrder(T);return 0;}先序遍历建立二叉树Bitr原创 2020-05-21 16:36:30 · 5153 阅读 · 1 评论 -
【06】树和二叉树概念及性质
1.1树的定义树(Tree)是n(n>=0)个结点的有限集合。当n=0时,集合为空集,称为空树;否则称为非空树。在任意一棵非空树T中:(1) 有且仅有一个特定的结点,称为根结点。(2) 当n>1时,除根结点以外的其余结点可分为m(m>0)个互不相交的集合T1,T2…Tm。其中每一个集合本身又是一棵树,并称其为根的子树。树的定义具有递归性,递归定义描述了树的递归特性,即一棵树是由根及若干棵子树构成的,而子树又可由更小的子树构成。...原创 2020-05-20 15:26:43 · 326 阅读 · 0 评论 -
利用顺序存储(数组)存储一棵完全二叉树,输出第i个数据元素的双亲和孩子
核心代码if(temp==-1) printf("无结点\n"); else if(temp==1) printf("无双亲\n"); else printf("编号为%d为双亲\n",temp/2); if(2*temp>l) printf("无左孩子\n"); else if(2*temp<=l) printf("左孩子为:%d\n",a[2*temp]); if((2*temp+1)>l) printf("无右孩子\n"); e原创 2020-05-19 18:17:21 · 1842 阅读 · 0 评论 -
链表赋值和链表拆分
今天我们老师下发了这道题目: 设计算法将一个带头结点的单链表A分解为两个具有相同结构的单链表B和C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点。 我想都...原创 2020-05-07 20:13:53 · 595 阅读 · 0 评论 -
编写一个算法,计算在头指针为head的单链表中数据域值为x的结点个数。
核心代码void Count(LinkList head,int y){ LinkList p; p=head; int n=0; while(p->next!=NULL) { p=p->next; if(p->data==y) n++; //while循环统计出现次数 } printf("%d出现次数为:%d",y,n);}main函数...原创 2020-04-30 15:41:15 · 13782 阅读 · 3 评论 -
【05】数组
1.数组的概念 数组:是由类型相同的数据元素构成的有限序列,每个数据元素称为一个数组元素(简称元素)。 数据元素可以是整数、实数等简单类型,也可以是数组等构造类型。2.数组的存储结构  ...原创 2020-04-30 10:11:19 · 1145 阅读 · 1 评论 -
【04】 串概念和串的模式匹配
1.串的基本概念串是由 n ( n ≥0)个字符组成的有限序列。2.C语言的串函数( 1)串长度 int strlen(char * str)( 2 )拷贝 char *strcpy(char * str1,char * str2)( 3 )比较 int strcmp(char * str1,char *str2)( 4 )字符定位 char * strchr(char str, ch...原创 2020-04-26 14:10:56 · 297 阅读 · 0 评论 -
使用栈将用户输入的十进制数转换为其指定的进制(2进制、8进制、16进制)数据
#include<stdio.h>#include<windows.h>#define MAXSIZE 100typedef int ElemType;typedef struct Stack{ ElemType data[MAXSIZE]; //栈空间 int top; //栈顶指示}SeqStack;void Init_SeqStack(Se...原创 2020-04-23 15:53:35 · 1688 阅读 · 0 评论 -
【01】分别使用头插法和尾插法建立单链表
分别使用头插法和尾插法建立单链表头插法#include <stdio.h>#include<stdlib.h>#include<iostream>#include<string>typedef int Status;typedef int ElemType;typedef struct Node{ ElemType data; ...原创 2020-04-15 12:38:49 · 80001 阅读 · 0 评论 -
【02】顺序栈的初始化、入栈、出栈等操作
大体框架来自数据结构课本,本人稍做修改。废话不多说上代码。#include<stdio.h>#include<windows.h>#define MAXSIZE 100typedef int ElemType;typedef struct Stack{ ElemType data[MAXSIZE]; //栈空间 int top; //栈顶指示...原创 2020-04-14 21:34:23 · 2062 阅读 · 0 评论 -
【03】顺序队列的初始化、入队、出队等操作
顺序队列的初始化、入队、出队等操作#include<stdio.h>#include<stdlib.h>#define MAXSIZE 4typedef int ElemType; //ElemType表示队列中存放的数据类型typedef struct Queue{ ElemType data[MAXSIZE]; int front; //头指针; i...原创 2020-04-16 15:52:45 · 2116 阅读 · 0 评论