
数据结构
学习数据结构过程中的一些算法实现
qq_53439474
这个作者很懒,什么都没留下…
展开
-
冒泡排序算法实现
#include<stdio.h>void bubblesort(int a[], int n){ int temp; for(int j=n-1;j>0;j--)//控制比较的最右端下标 for (int i = 0; i < j; i++)//执行冒泡比较 { if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } }原创 2021-11-25 17:11:46 · 169 阅读 · 0 评论 -
拓扑排序算法的实现
//拓扑排序算法#include<stdio.h>#include<string.h>#include<stdlib.h>//定义边表结构struct Arcnode { int adjvex; Arcnode* next;};//定义顶点表结构struct Vertexnode { int in; char vertex; Arcnode* first;};//定义图结构struct Graph{ Vertexnode adjlist原创 2021-11-19 12:33:44 · 418 阅读 · 0 评论 -
二叉排序树的算法实现
//二叉排序树//可以用来排序#include<stdio.h>#include<stdlib.h>//定义树节点struct Binode{ int data; Binode* lchild; Binode* rchild;};//插入函数构建void BSTinsert(Binode* &root, int key)//指针引用可修改指针的值,否则智能修改指针所指的值{ if (root == NULL) { root = (Binode原创 2021-11-19 19:12:35 · 235 阅读 · 0 评论 -
二叉树的前中后递归与非递归遍历算法实现
(1) 二叉树的前序遍历程序,包含递归、非递归。(2) 二叉树的中序遍历程序,包含递归、非递归。(3) 二叉树的后序遍历程序,包含递归、非递归。代码如下#include <stdio.h>#include <stdlib.h>// 定义节点typedef struct Node { char data; struct Node* lChild; struct Node* rChild;} BinTNode;// 根据广义表表示二叉树结构来创建二叉树链表原创 2021-11-19 19:16:20 · 145 阅读 · 0 评论 -
二叉排序树的查找递归算法实现
//二叉排序树//可以用来排序#include<stdio.h>#include<stdlib.h>//定义树节点struct Binode{ int data; Binode* lchild; Binode* rchild;};//插入函数构建void BSTinsert(Binode* &root, int key)//指针引用可修改指针的值,否则智能修改指针所指的值{ if (root == NULL) { root = (Binode原创 2021-11-19 20:42:53 · 4163 阅读 · 0 评论 -
网图的最小生成树prim(普利姆)算法
#include<stdio.h>#include<limits.h>#define INF 0x3f3f3f3f//定义辅助表类型struct Nodetype {int adjvex;int lowcost;};//定义图结构,包括邻接矩阵和顶点信息数组,边和顶点数量struct Graph {int matrix[100][100];char vertex[100];int vernum, edgenum;};//初始化图void Creategr原创 2021-11-16 21:02:57 · 526 阅读 · 0 评论 -
希尔排序算法实现
```c#include<stdio.h>#include<stdlib.h>void Shellsort(int r[], int n){ for (int d = n / 3; d >= 1; )//增量d一般取n/2,这个是作业要求取n/3 { for (int i = d + 1; i <= n; i++) { r[0] = r[i];//r[0]作为临时保存比较元素作用 int j = i - d;//j初始取指向比较元素的.原创 2021-11-24 12:13:55 · 386 阅读 · 0 评论 -
01背包问题个人想法代码(部分数据结果不准确)
#include<stdio.h>struct Nature{ int v; int w; int s;};void bubblesort(Nature a[], int n){ Nature temp; for (int j = n - 1; j > 0; j--)//控制比较的最右端下标 for (int i = 0; i < j; i++)//执行冒泡比较 { if ((double)(a[i].w/a[i].v) <(double)(原创 2021-11-29 23:11:17 · 68 阅读 · 0 评论 -
二分查找算法
#include<stdio.h>#include<stdlib.h>int main(){ int array[] = { 1,4,7,9,22,56,89,122,234,556,789 }; int length = sizeof(array) / sizeof(array[0]); int index = -1,mid; int low = 0, high = length - 1; int target = 122; while (low <= h原创 2021-11-23 20:55:32 · 859 阅读 · 0 评论 -
递归、非递归的深度优先遍历算法实现
#include<stdio.h>#include<string.h>#include<stdlib.h>struct Arcnode { int adjvex; Arcnode* next;};struct Vertexnode { char vertex; Arcnode* first;};const int MAX_VERTEX = 10;Vertexnode adjlist[MAX_VERTEX];void Creategraph(原创 2021-11-19 19:21:18 · 866 阅读 · 0 评论 -
基于邻接矩阵的广度优先遍历算法实现
#include<stdio.h>#include<string.h>#include<stdlib.h>struct Mgraph { int visit[100]; int matrix[100][100]; char vertex[100]; int n, e;};void Create(Mgraph& g,char a[], int n,int e){ g.visit[100] = { 0 }; g.e = e; g.n =原创 2021-11-19 19:19:11 · 1283 阅读 · 0 评论 -
网图的最小生成树prim(普利姆)算法
#include<stdio.h>#include<limits.h>#define INF 0x3f3f3f3f//定义辅助表类型struct Nodetype { int adjvex; int lowcost;};//定义图结构,包括邻接矩阵和顶点信息数组,边和顶点数量struct Graph { int matrix[100][100]; char vertex[100]; int vernum, edgenum;};//初始化图void Cre原创 2021-11-16 21:17:20 · 85 阅读 · 0 评论 -
最短路径(Dijskra算法实现,迪杰斯特拉算法
```c#include<stdio.h>#include<limits.h>#define INF 0x3f3f3f3fconst int MAX_VERNUM=100;//定义图结构,包括邻接矩阵和顶点信息数组,边和顶点数量struct Graph { int matrix[100][100]; char vertex[100]; int vernum, edgenum;};//初始化图void Creategraph(Graph &g, cha.原创 2021-11-18 19:49:33 · 458 阅读 · 0 评论 -
二叉树的结点删除算法实现
//二叉排序树//可以用来排序#include<stdio.h>#include<stdlib.h>//定义树节点struct Binode{ int data; Binode* lchild; Binode* rchild;};//插入函数构建void BSTinsert(Binode* &root, int key)//指针引用可修改指针的值,否则智能修改指针所指的值{ if (root == NULL) { root = (Binode原创 2021-11-21 15:15:02 · 351 阅读 · 0 评论 -
01背包问题
#include<stdio.h>#include<stdlib.h>#include<string.h>struct Nature{ int v; int w; int s;};int max(int a, int b){ return a > b ? a : b;}int main(){ int N, V; scanf_s("%d %d", &N,&V); Nature a[1000]; for (int原创 2021-11-30 14:24:51 · 100 阅读 · 0 评论 -
有向图邻接表的递归非递归深度优先遍历
#include<stdio.h>#include<string.h>#include<stdlib.h>struct Arcnode {int adjvex;Arcnode* next;};struct Vertexnode {char vertex;Arcnode* first;};const int MAX_VERTEX = 10;Vertexnode adjlist[MAX_VERTEX];void Creategraph(char a[原创 2021-11-10 20:28:19 · 1280 阅读 · 0 评论 -
图的最小生成树克鲁斯卡尔(kruskal)算法
#include<stdio.h>//构造边的数据类型,包括起点终点权值struct Edgetype {int from;int to;int weight;};//少用宏定义const int MAXvertex = 10;const int MAXedge = 100;//构造图的结构体,包括用来储存顶点信息的数组ver和边信息的表数组edgetablestruct Graph {char ver[MAXvertex];Edgetype edgetable[MA原创 2021-11-15 21:55:53 · 477 阅读 · 0 评论 -
以汉诺塔为例的递归心得
对于递归不要去具体想象它的运作过程,要不然会绕晕编写代码的步骤大概是先找出临界条件和临界操作然后找出循环的操作是什么,可以试着倒数第二(n-1)到最后一个(n)去探索。递归往往把前面的当作一个整体,然后对下一个个体进行操作,例如汉诺塔就是把1到n-1当做一个整体然后与第n个进行操作,这样可以起到简化的作用,对于前面的1到n-1的整体,又可以由1-n-2组成的整体和n-1进行操作,就这样一直传递到1,触发临界条件操作,然后进行归的操作(出栈)附上代码void hanoi(int n,char A,原创 2021-10-27 22:11:53 · 289 阅读 · 0 评论 -
C语言实现的通讯录
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>//#define _CRT_SECURE_NO_WARNINGSstruct person{ char num[20]; //手机号 char name[20]; //姓名 char email[20]; //邮箱 char address[50]; //地址};int menu()/原创 2021-12-24 15:38:18 · 302 阅读 · 0 评论 -
快速排序(含有递归)算法
#include <stdio.h>int partition(int a[], int first, int end)//划分函数,返回轴值{ int i = first; int j = end; while (i < j)// { while (i < j&&a[j] > a[i])//从轴值右边找到一个比轴值大的元素 j--; if (i < j)//这个值应该在轴值的右边 { int temp = a[i]原创 2021-12-05 21:57:25 · 257 阅读 · 0 评论 -
选择排序,没什么好说的凑字数
#include<stdio.h>void selectsort(int a[], int n){for (int i = 0; i < n - 1; i ++){//int min = i;for (int j = i + 1; j < n; j++){ if (a[i] > a[j]) { int temp=a[i]; a[i] = a[j]; a[j] = temp; } }}}int main(){int原创 2021-12-05 22:10:36 · 219 阅读 · 0 评论 -
堆排序(构建大根堆)
#include<stdio.h>//这个算法的思路是将一棵完全二叉树从根开始从1-n编号,其结点数据域对应着数组的1-n元素的值void sift(int a[], int k, int end)//调整函数,k为调整开始结点,end为结点总数{ int i = k;//若调整层数比较浅的结点则也需要调整与其父节点互换孩子为根节点的子树 int j = 2 * i;//指向左孩子 while (j <= end)//判断是否为叶子结点 { if (j < end&原创 2021-12-06 16:37:00 · 399 阅读 · 0 评论 -
哈夫曼树的创建和哈夫曼编码
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<limits.h>#include<string.h>//int n1 = 0, n2 = 0;#pragma warning(disable:4996)struct Huffunode//定义哈夫曼树结点{ int weight; int parent; int lchild; int rchild;原创 2021-12-02 20:03:32 · 1017 阅读 · 0 评论