数据结构与算法(C语言)
文章平均质量分 61
数据结构与算法的基本概念和简单的实例演示
犀牛超人
这个作者很懒,什么都没留下…
展开
-
邻接矩阵创建无向网(C实现)
个人是在准备2023计算机的考研,所以在此记录自己的学习成果,由于最近报了平台的C1认证,部分时间用在前端的练习中,数据结构还剩图、查找和排序,一改之前的作风,不在进行说明一些基本概念,直接附可以执行的代码供需要的同学使用。结构体定义:#include<stdio.h>#include<stdlib.h>#define maxint 32767 #define maxnum 100#define ok true#define error falsetypede.原创 2022-03-15 17:40:09 · 2651 阅读 · 4 评论 -
哈夫曼树和哈夫曼编码解析,附源码(C实现)
1.哈夫曼树1.1概念通俗来讲,就是在一堆数字中,选取最小的两个当叶子节点,他们的加和为他们的父结点。如图:至于怎么构造这看自己心情,因为二叉树得到构造不唯一,这也是它同权不同构的特点。如果是字符A,B,C,D....就看每种字符出现的频率!1.2创建哈夫曼树1.21 哈夫曼树结构typedef struct { int weight; int parent,lchild,rchild;}HTNode,HuffmanTree[M+1];1.22 挑选最小两个原创 2022-02-22 21:50:22 · 1018 阅读 · 1 评论 -
线索二叉树的 前中后 创建和遍历(C实现)
目录1.结构1.1初始化tag2.基本操作2.1 先序创建二叉树2.2.先序线索化2.2.1.先序遍历2.3.中序线索化2.3.1 中序遍历2.4.后序线索化2.4.1 后序遍历1.结构#include<stdio.h>#include<stdlib.h>#define false 0#define true 1using namespace std;typedef struct BTnode{.原创 2022-02-20 21:50:55 · 699 阅读 · 0 评论 -
二叉树的创建,遍历及其他操作(C实现)
基本结构:#include<stdio.h>#include<stdlib.h>#define false 0#define true 1using namespace std; typedef struct BTnode{ int data; struct BTnode *lchild,*rchild; }*BTree,BTnode;一、全递归实现1.创建对于递归实现创建,思路还是较简单,重要是把握结束递归的标志,例如创建下图的二叉树。原创 2022-02-18 18:10:21 · 668 阅读 · 2 评论 -
广义表的创建,长度,深度和元素个数详解(C实现)
一、广义表操作思路1.创建思路typedef struct node{ int tag; //用于识别单元素与子表 union //大括号中多选一 { char data; //单元素 struct node *child; //子表 }val; struct node *next; //指向下一个元素}GLNode;由图可看出,tag=1时,为子表的头结点,tag=0时,为子表元素;并且头结点有一个指向孩子结点的child指针,元素结点有原创 2022-02-16 17:31:50 · 2217 阅读 · 3 评论 -
稀疏矩阵(三元组)的创建,转置,遍历,加法,减法,乘法。C实现
一、思路。1.创建。可以直接赋值字符串,但是为0的元素也要依次赋值,比较麻烦,但是容易理解也能实现。其次也可以构思三元组赋值,只赋值非零元素和它的行,列数,在打印时进行if判断,没有赋值的就输出0,这样比较简单。创建结构体时,一个矩阵需要有它的行总数和列总数,并且针对三元组,你还需要每个元素所在的行和列,还有这个三元组的非零元素总和。2.遍历。对于三元组,它包括非零元素集合和零元素集合,针对于非零元素的行,列数,进行双重for循环,如果非零元素的行,列数与for循环中的变量相等,就输原创 2022-02-14 22:27:44 · 7527 阅读 · 4 评论 -
BF和KMP的详解
一、BF算法。BF模式匹配算法比较易于理解和编程实现,但是面对文本较大时,计算机的响应效率会比较低,故也称之为“暴力匹配”。实现过程:初始图当需要匹配的位置pos为1时:如果元素一样,则i++,j++依次匹配,如果不一样:那就把i指针回溯到第2位,j移动到模式串的第1位,然后又重新开始这个步骤:至于回溯位置的理解,个人是采用数学归纳法:设此时的 i=M=7,j=N=3 M-N表示主串中开始匹配的起始位置的前一项,所以要想产生有效的回...原创 2022-02-13 20:29:36 · 692 阅读 · 1 评论 -
堆串的操作(C实现)
一、堆串概念。与定长顺序穿的存储结构类似,都是用一组地址连续的存储单元存储串的字符序列,不同的是堆串的存储空间是动态分配的,只要存储空间分配成功,就不会担心串在插入或者连接时候出现截断的情况。malloc(),free(),realloc() 这三个函数用来对动态存储进行操作。二、基本操作。#include<stdio.h>#include<stdlib.h>#include<string.h>#define false 0#define t..原创 2022-02-12 21:17:47 · 1361 阅读 · 0 评论 -
顺序串的基本操作(C实现)
一、概念顺序结构的存储空间都是事先定义的,顺序串也不例外,故也可成为 定长顺序串,它的存储类型是字符串的char类型。二、具体实现1.结构体定义#include<stdio.h>#include<stdlib.h>#include<string.h>#define true 1#define false 0#define max 20typedef struct { char data[max]; int length;}SString原创 2022-02-11 19:07:42 · 7287 阅读 · 0 评论 -
链式队列的基本操作(C实现)
一、链队列简介。和链栈相似,适用于动态存储,由于是先进先出原则,因此可以用单链表表示队列,并设置一个头指针(front)和一个尾指针(rear),入队时,尾指针(rear)后移,出队时,头指针(front)后移。二、具体操作1.结构体定义和初始化采用结构体套用的方法,链表的结构中有前指针和后指针,而结点中有数据域和直接后继域。#include<stdio.h>#include<stdlib.h>#include<string.h>#defi原创 2022-02-10 23:31:16 · 4270 阅读 · 4 评论 -
顺序循环队列的基本操作(C语言实现)
一、队列和循环队列基本概念队列:和栈相反,队列是一种先进先出(FIFO)的线性表。只允许在一端插入,在另一端删除。 允许插入的叫"队尾"(rear),允许删除的叫"队头"(front)。 入队操作:L->rear++; L->data[L->rear]=x;(需要入队的元素) 出队操作:L->front++; x=L->data[L->front]; 求队长:队长=(L->rear)-(L->front);...原创 2022-02-09 20:53:29 · 8747 阅读 · 2 评论 -
单链表的基本操作(学习总结)
单链表的声明初始化:1.头文件: 这里不做太多说明,是学习C语言的基础。#include<stdio.h>#include<stdlib.h>2.结构声明: 数据结构算法中,每个表,树,图类的工具组都需要定义它的结构来符合我们的需求。例如本次的单链表: 这里的 Lnode和*Linklist(指针型)是结构体的不同表达方式,二者都可任意使用,例如:Lnode *H=Linklist Htypedef struct Lnode{...原创 2022-02-03 22:30:45 · 3799 阅读 · 2 评论 -
双向链表的删除和插入
一、初始操作双向链表定义如下:#include<stdio.h> #include<stdlib.h> typedef struct DLnode{ int data; struct DLnode *prev,*next; }DLnode,*DLinklist;尾插法创建: void Create(DLinklist &L){ L=(DLinklist)malloc(sizeof(DLnode)); L->next=NULL; D原创 2022-02-05 00:21:51 · 12330 阅读 · 9 评论 -
链表实操(多项式的创建,加法,减法,求值)
一、链表结构定义:#include<stdio.h>#include<stdlib.h>typedef struct Lnode{ float coef; //系数 int expn; //指数 struct Lnode *next; }Lnode ,*Linklist;对于多项式的运算,存在系数冲突(删除)和系数不冲突(插入)运算,所以使用链表最为方便。并且,数据部分要定义一个系数和一个指数,将二者分开来记录。二、多项式的原创 2022-02-05 23:10:33 · 4619 阅读 · 5 评论 -
顺序栈和双向顺序栈的操作
一、顺序栈1.定义结构:#include<stdio.h>#include<stdlib.h> //malloc和realloc函数的库 #define maxsize 100 //宏不需要加';'typedef struct { int data[maxsize]; int top;}myStack,*Stack;顺序栈类似于顺序表,栈中的元素可以用一个一维数组来保存,同时也要有最大值;而且还要包括一个.原创 2022-02-06 21:53:51 · 1554 阅读 · 0 评论 -
链栈(入栈,出栈,遍历)
一、链栈概述1.为什么要用链栈?链式存储结构可以更好的避免栈上溢,因为顺序栈在定义结构体时需要定义最大值。2.什么是链栈栈的链式存储结构就是链栈,栈底就是链表的最后一个结点,而栈顶是链表的第一个结点,一个链栈可以由栈顶指针top唯一确定。结构体的定义:#include<stdio.h>#include<stdlib.h>typedef struct Stack{ int data; struct Stack *next;}*LStack;二、原创 2022-02-07 23:23:12 · 14096 阅读 · 5 评论 -
栈的应用(表达式求值--中缀表达式)C实现
一、准备工作对于使用栈来进行表达式求值,使用顺序栈即可 定义两个栈,一个操作数栈(int 数据类型),一个运算符栈(char 数据类型)。 两个栈都应该具备:初始化,入栈,出栈,取栈顶元素这些功能函数。 需要运算符的优先级关系所定义的功能函数。优先级关系表: 右 左 + - * / ( ) ...原创 2022-02-08 22:24:16 · 1770 阅读 · 0 评论