
C语言实现数据结构
以C语言对抽象的数据结构进行编程
吃数据的猴子
程序人生
展开
-
C语言中序遍历实现线索二叉树(二叉树的改进)
结构体#define ElemType chartypedef enum{LINK,THREAD}Tag_Type;//LINK表示指针,指向结点的左右孩子 //THREAD表示线索,指向结点的前驱(L)或后继(R)typedef struct BinTreeNode{ ElemType data; struct BinTreeNode *leftChild; struct BinTreeNode *rightChild;原创 2020-07-30 23:36:09 · 1079 阅读 · 0 评论 -
C语言实现循环队列(队列的顺序表示的改进)
对队列的顺序表示的改进队满但是队空时font下标和rear下标也是相等的,为了区分,可以采用下面这种方式font=rear+1表示队满也可以采用设一个标志位判断空还是满入队void EnQueue(Queue *Q, ElemType x){ if(((Q->rear+1)%MAXSIZE) == Q->front)//若队满退出 return; Q->base[Q->rear] = x; Q->rear = (Q->rear+1)%MAXSI原创 2020-07-29 22:55:49 · 315 阅读 · 0 评论 -
C语言实现队列(队列的顺序表示)
结构体#define ElemType int#define MAXSIZE 8typedef struct Queue { ElemType *base;//这个指针指向初始化的动态分配存储空间 int front;//用于记录队头下标 int rear;//用于记录队尾下标,表示能放的下标}Queue;入队void EnQueue(Queue *Q, ElemType x) { //队列满了,rear下标指向MAXSIAZE if (Q->rear >= MA.原创 2020-07-29 21:57:36 · 597 阅读 · 0 评论 -
C语言实现邻接表(无向图的链式表示)
V1顶点后面链着的是与他相连的边的序号(第i个单链表后的结点表示依附于顶点Vi的边)这是一个无向图,所以邻接表一共有12条边定义结构体原创 2020-08-05 23:01:14 · 2577 阅读 · 1 评论 -
C语言实现邻接矩阵(无向图的顺序表示)
有向/无向不带权图带权图定义图的结构体#define Default_Vertex_Size 10#define T chartypedef struct GraphMtx{ int MaxVertices;//最大顶点容量 int NumVertices;//图中顶点个数 int NumEdges;//图中边的条数 T *VerticesList;//指向存有顶点的空间的指针 int **Edge;//指向存矩阵的空间的指针}GraphMtx;初始化void原创 2020-08-06 13:06:22 · 2566 阅读 · 0 评论 -
C语言实现实现树和森林(孩子兄弟表示法)
因为树和森林都可以与二叉树相互转化,所以采用二叉链表的存储方式表示树和森林容易在计算机中实现共有10个节点,则有11个空指针树的二叉链表(孩子-兄弟)存储表示*fristChild指向该结点的第一个孩子节点,*nextSibling指向该结点的兄弟节点。虽然类似于二叉树的左右孩子节点指针,但是功能不同#define ElemType chartypedef struct TreeNode{ ElemType data; struct TreeNode *fristChild; st原创 2020-07-31 15:52:07 · 3743 阅读 · 1 评论 -
C语言实现最小生成树之普里姆算法
实现的文字说明如何实现的图示说明mst[2]=1 lowcost[2]=6 从点1到点2的权值是6以v3为终点的权值最小,把边<MST[3],3>=1加入最小生成树MST以v6为终点的权值最小,把边<MST[6],6>=4加入最小生成树MST以v4为终点的权值最小,把边<MST[4],4>=2加入最小生成树MST以v2为终点的权值最小,把边<MST[2],2>=5加入最小生成树MST当所有的数组的值都为0,说明创建成原创 2020-08-07 16:25:48 · 1197 阅读 · 0 评论 -
C语言实现最小生成树之克鲁斯卡尔算法
图示难点是:当选择最后一条边时,v2-v3是5,v1-v4也是5,但是v1-v4一旦连上就会出现环且这个图不是连通图,所以在代码中如何判断环的出现和保证最小生成树是连通的?代码//定义一个结构体记录生成树一条边的起始顶点和终止顶点,还有相应的权值的信息typedef struct Edge{ int x; // start int y; // end E cost;}Edge;int cmp(const void*a, const void *b)//比较权值的大小{ re原创 2020-08-07 20:13:48 · 1302 阅读 · 0 评论 -
C语言实现稀疏矩阵
稀疏矩阵的压缩存储:对0元不分配定义结构体(三元组表示法)#define ElemType int typedef struct Triple {//表中每个元素都有3个分量 int i;//行下标 int j;//列下标 ElemType e;//数值};typedef struct SMatrix {//用于管理整个矩阵 Triple data[MAXSIZE];//矩阵中的每个元素 int mu;//矩阵的行 int nu;//矩阵的列 int tu;//矩阵的非零个数};原创 2020-07-26 20:00:15 · 3232 阅读 · 0 评论 -
C语言实现二叉树(二叉链表)
文章目录定义结构体初始化先序遍历创建二叉树测试递归遍历中序前序后序非递归遍历中序前序后序其他方法定义结构体初始化先序遍历创建二叉树//1按照先序次序输入二叉树中结点的值,构造二叉链表表示的二叉树btvoid CreateBinTree_1(BinTree *bt) { CreateBinTree_1(bt, &(bt->root));//参数的传递都需要地址}void CreateBinTree_1(BinTree *bt, BinTreeNode **t) {//*t代表根节原创 2020-07-30 17:18:28 · 9186 阅读 · 1 评论 -
C语言实现二叉树之递归和非递归遍历
递归遍历中序前序后序非递归遍历中序前序后序原创 2020-07-31 22:12:27 · 872 阅读 · 1 评论 -
C语言实现迪杰斯特拉算法求最短路径
文章目录1.找到初始顶点X到各个顶点的权值(这里X为A)第2步和第3步用一个for(i1.找到初始顶点X到各个顶点的权值(这里X为A)for (int i = 0; i < n; i++){ dist[i] = GetWeight(g,v,i); s[i] = false; if (i != v && dist[i] < MAX_COST) path[i] = v; else path[i] = -1;}第2步和第3步用一个for(i<n-1)包原创 2020-08-10 23:33:22 · 4067 阅读 · 0 评论 -
C语言实现串(定长顺序表示)
思路:用一组地址连续的存储单元存储串值的字符序列#include<stdio.h>#include<string.h>#define MAXSTRLEN 20//预定义最大串长#define u_char unsigned chartypedef u_char SString[MAXSTRLEN + 1];//定义一个无符号字节型的数组,数组中每个单元能存储的数据范围为0~255//字符型所存储的数据是用来表示字符的那这个数组最多能存放多少个单元呢??串长表示方法原创 2020-07-25 16:34:22 · 640 阅读 · 0 评论 -
C语言实现顺序栈
定义顺序栈的结构体#include <stdio.h>#include <stdlib.h>#include <string.h>#define ElemType int//代表每个节点的大小,int就是4字节#define INIT_SIZE 10#define INCREAMENT INIT_SIZEtypedef struct SeqStack { ElemType* base;//类型是ElemType的指针指向这个栈 int top;//top原创 2020-07-23 23:31:08 · 261 阅读 · 0 评论 -
C语言实现静态链表
定义静态链表的结构体#define MAX_SIZE 30#define ElemType char//定义静态链表的节点,由数据和游标组成typedef struct StaticNode { ElemType data; int cur;}Node;//这个结构包含了30个Node类型的节点,如图所示typedef Node StaticList[MAX_SIZE];初始化cur游标指向下一个数组元素的index//引用,给main函数调用的mylist起别名,指向同一块原创 2020-07-23 14:49:27 · 285 阅读 · 0 评论 -
C语言实现串(堆分配存储表示)
也叫变长分配存储表示原创 2020-08-15 11:32:47 · 617 阅读 · 0 评论 -
C语言实现串的模式匹配
BF(暴力匹配算法)思路:将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。代码实现(顺序存储实现的求子串定位函数)int StrIndex(SString S, SString T, int pos){ int i = pos; int j = 0; while (S[i] != '\0' && T[j] != '\0') {原创 2020-08-18 20:45:21 · 1492 阅读 · 0 评论 -
C语言实现哈希表(除留余数法+链地址法)
定义结构体#define ElemType int#define P 7typedef struct HashNode{ ElemType data; HashNode* link;}HashNode;typedef HashNode* HashTable[P];//表里存的是个地址,这是个HashNode*类型的数组//如HashTable[i] 表示指向第一个结点的地址实现方法#include "HashTable.h"/**初始化*/void InitHashTable原创 2020-08-24 22:14:28 · 3432 阅读 · 1 评论 -
C语言实现平衡二叉树
定义结构体#define Type inttypedef struct AVLNode { Type data; AVLNode* leftchild; AVLNode* rightchild; int bf;//平衡因子}AVLNode;typedef struct AVLTree { AVLNode* root;}AVLTree;插入结点void InitAVLTree(AVLTree* avl) { avl->root = NULL;}bool Insert(原创 2021-07-23 14:19:41 · 435 阅读 · 0 评论