![](https://img-blog.csdnimg.cn/20200210132821788.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
本人学习时的一些实验总结
德哥是程序员
java开发工程师
展开
-
快速排序与冒泡排序的实现
冒泡排序象一个气泡从河底往上冒的过程一样,每次排序都把最大的数据放到最后,具体的第一趟冒泡排序的过程为:比较第一个数据元素x[0]与第二个数据元素x[1]的大小,若x[0]<x[1],则交换两者的值,否则什么都不做;接着跟x[2],x[3]…比较,直到x[n-1]与下x[n-2]的比较。接着第二、三…趟冒泡排序,过程与上一趟相同,只不过只需比较到比上一趟前一个位置即可。 快速排序是冒泡排序的...原创 2020-02-17 15:14:23 · 227 阅读 · 0 评论 -
常用的几种插入排序的c语言实现
插入排序中最基本的就是直接插入排序,除此外还有如下几种常用的插入排序的方法:折半插入排序、2-插入排序、表插入排序、希尔排序等。 下面用c语言实现直接插入排序、折半插入排序、希尔排序 具体的代码如下: #include<stdio.h> void Insertsort(int x[], int n);//直接插入排序函数的声明 void Binsertsort(int x[], int...原创 2020-02-16 21:49:57 · 624 阅读 · 0 评论 -
增长数组的列表功能的实现
该程序的主要用于打破数组定长的限制,并实现增长数组的List的部分功能。 这是头文件的代码: #ifndef _ARRAY_H_ #define _ARRAY_H_ typedef int Elementtype; struct List { Elementtype* a; int n; int c; }; void IsoutLitmit(List* p); void AddAt(Lis...原创 2019-10-29 23:29:49 · 167 阅读 · 0 评论 -
链表的游标实现
如果需要使用链表时,而又不能使用指针时,我们就的需要使用链表的游标实现法,具体的介绍如下。 首先说明一下链表的指针功能的两个特点:(a)数据存储在一个结构体中,每个结构体包含有数据及指向下一个结构体的指针(b)一个新的结构体可以通过调用malloc函数从系统全局内存得到,并可以通过调用free函数释放。 要用游标法实现实现这两个功能,我们这样做:(1)定义一个全局结构体数组,每个数组元素的下标可以...原创 2019-11-08 17:20:06 · 416 阅读 · 0 评论 -
用c语言实现单向链表的增,删,读,打印操作
头文件list.h如下: #pragma once # ifndef _LIST_H_ # define _LIST_H_ struct Student { char name[20];//姓名 int acount; // 学号 }; struct List { Student stud; List* next; }; void Addlast(List* p, Student ...原创 2019-09-29 17:42:35 · 127 阅读 · 0 评论 -
用栈判断一个字符串是否平衡
注: (1)本文定义:左符号:‘(’、‘[’、‘{’…… 右符号:‘)’、‘]’、‘}’……. (2)所谓的字符串的符号平衡,是指字符串中的左符号与右符号对应且相等,如字符串中的如‘(’等左符号与‘)’等右符号对应且相等,则称该字符串平衡。 程序的原理 该程序用栈来实现判断字符串是否平衡,遍历一个字符串,如遇到左符号(该程序只考虑三种符号:()、[]、{})‘(’、‘[’、‘{’,则入栈;遇到右符...原创 2019-11-14 16:32:06 · 465 阅读 · 0 评论 -
计算算术表达式的值
程序中相关概念的说明 中缀表达式:正常的算术表达式,如1+23-3/4 后缀表达式:将上述中缀表达式转化为后缀表达式为:123+34/- 程序的原理 先定义一个栈,将中缀表达式(正常的算术表达式)转化为后缀表达式。遍历一个表达式,遇到运算符时,若为空栈,则直接入栈;若该运算符的优先级高于后等于栈顶运算符的优先级,入栈;否则将栈的所有运算符弹出,该运算符入栈。将中缀表达式转化为后缀表达式后,再定义一...原创 2019-11-17 23:04:32 · 877 阅读 · 0 评论 -
二叉树的三序遍历
三序遍历 一棵二叉树如下所示: 前序遍历:先访问根节点,接着遍历左节点,最后遍历右节点,上述二叉树的前序遍历如下ILoveYou. 中序遍历:先遍历左节点,接着访问根节点,最后遍历右节点,上述二叉树的中序遍历如下oLevIoYu. 后序遍历:先遍历左节点,接着遍历右节点,最后访问根节点,上述二叉树的后序遍历如下.oevLouYI. 程序的代码 #头文件 #pragma once #ifndef _...原创 2019-11-24 21:07:22 · 555 阅读 · 0 评论 -
二叉查找树ADT的查找、插入、删除的操作的实现
程序的原理 该程序用递归的方法来实现ADT的这些操作,如实现查找操作时,先判断当前节点里的元素与所要查找元素X的大小,若比X小,则向左边递归;若比X大,则向右边递归,其他的操作与此类似。 程序的代码 #头文件 #pragma once #ifndef _FIND_TREE_H_ #define _FIND_TREE_H_ struct TreeNode; typedef double Eleme...原创 2019-12-06 23:48:35 · 233 阅读 · 0 评论 -
编程实现AVL删除、插入等操作
程序原理 该程序用递归的方法来实现AVL的这些操作,如实现查找操作时,先判断当前节点里的元素与所要查找元素X的大小,若比X小,则向左边递归;若比X大,则向右边递归,其他的操作与此类似。但在删除与插入操作时,要判断AVL树是否还满足平衡条件,要相应地进行旋转,由于删除操作时判断是否平衡较困难,本程序假设删除操作不会破坏平衡条件。由于AVL树的许多操作与ADT树相同,故本程序只测试一些不同的操作。 程...原创 2019-12-11 23:41:58 · 157 阅读 · 0 评论 -
Huffman编码的c语言实现
在此本人用一个简单的例子来介绍Huffmantree。 a ,b,c,d,e频率分别为2、4、1、5、3,首先来建立Huffmantree.a、b、c、d、e分别代表此Hufmantree的5个叶子节点,刚开始时这5个节点代表5棵树,这5棵树组成森林。取森林中频率最小的两棵树,合成一棵二叉树,该二叉树的根节点的频率为这两个叶子结点的频率之和,将这两个频率最小的树从森林中删掉,新的树加入森林,一...原创 2020-02-05 14:38:27 · 2293 阅读 · 0 评论 -
图的深度优先遍历(DFS)与广度优先遍历(BFS)的c语言实现
头文件 #pragma warning( disable : 4996) #pragma once #ifndef _GRAPH_H_ #define _GRAPH_H_ #define MAX_VERTEX_NUM 20 typedef int Graphkind;//有向图该值为1、无向图该值为0 typedef int InfoType; typedef char VertexType; ...原创 2020-02-10 13:11:01 · 5387 阅读 · 2 评论