C语言实现数据结构
zhangphh
欲戴王冠,必承其重
展开
-
数据结构之队列(顺序队列和链队列)
参照书上及网上大神的算法思想所写代码1.顺序队列:顺序队列的基本实现是顺序表,出队后再进队时会出现“假溢出”现象,所以用循环队列来实现,其核心步骤为:r = (r+1)%msize;(用于进队)和 f = (f+1)%msize;(用于出队)具体的各个功能的实现类似于顺序栈的实现,顺序栈的实现直接上完整代码#include <stdio.h>#include <stdl...原创 2018-10-12 21:13:46 · 336 阅读 · 0 评论 -
数据结构之线索二叉树的简单实现
二叉树的链式存储时会有较多空间的浪费,当一颗有 n 个节点的二叉树存储共有2n个指针域,但是只有n-1个被用到,所以剩下的n+1个都会被浪费掉,因此可以想一种办法把剩余的空间利用起来,线索二叉树应运而生。将二叉树重新定义如下每个节点为下列形式lchild ltag data rtag rchild其中:ltag=0 时lchild指向左子女;ltag=1 时lchild指向前驱;rtag...原创 2018-10-21 21:44:12 · 243 阅读 · 0 评论 -
数据结构之堆的简单实现
堆的存储结构实际上是一个完全二叉树,通过不断地调整各个节点的位置,可以得到最小堆或者最大堆,最小堆是每一个双亲都比每一个子节点的值要小,但是兄弟节点之间的大小未知,同样,最大堆即是双亲都比每一个子节点要小。对于堆来说,由于相对简便所以采用数组的方式来实现。从下标为 0 开始,如果双亲节点下标为 i ,则左子节点为 2* i + 1,右子节点下标为 2*i + 2。反过来,对于下表为 i 的子节点,...原创 2018-10-22 19:39:27 · 103 阅读 · 0 评论 -
数据结构之二叉树基本功能的实现
二叉树的各种性质在这里不再重复,本文实现二叉树的基本操作,包括创建、前序输出、中序输出、后序输出、删除二叉树、叶子结点个数、叶子节点的值、交换左右子树1.首先创建结构体:typedef struct Tree_Node{ char ch; struct Tree_Node *left; struct Tree_Node *right;}tree;2.先序创建树tree *crea...原创 2018-10-14 12:54:35 · 540 阅读 · 0 评论 -
数据结构之堆栈的链接表示
堆栈的链接表示其实就是实现一个带头节点的单链表,头结点即为top指针,进栈操作就是利用头插法创建堆栈,出栈即为删除第一个节点,在这里只实现创建、进栈、出栈操作,其余操作请查阅单链表实现完整代码如下#include <stdio.h>#include <stdlib.h>typedef struct Noded{ struct Noded *top; int da...原创 2018-10-12 19:51:43 · 322 阅读 · 0 评论 -
数据结构之顺序栈的实现
顺序栈,其实就是一个动态一维数组,为数组分配默认容量,当容量大于默认时,利用realloc()函数重新分配。1.定义结构体typedef struct stack{ int msize;//初始容量 int top;// int *elem;//基指针 }stack;2.实现各种操作:建立栈、获得栈顶元素、长度、进栈、出栈等,算法很简单直接上代码#include <stdi...原创 2018-10-12 19:29:20 · 484 阅读 · 0 评论 -
数据结构之双向链表的实现
对于双向链表的实现和单链表非常相近,只是多了一个指向,本文仅实现带头结点的双向链表的插入、删除、打印,其他功能与单链表实现完全一致,若对单链表不熟悉请看:数据结构之单链表的实现1.首先家里结构体:typedef struct Noded{ struct Noded *pre;//前驱 struct Noded *next;//后驱 int data;//数据域 }Noded;2....原创 2018-10-12 12:43:53 · 252 阅读 · 0 评论 -
数据结构之单链表的简单操作(插入 删除 查找 撤销 打印)
链接表首先要建立指针域和数据域,并用本节点的指针域指向下一个节点,对于链表的特点这里不做详细解释1.建立指针域和数据域typedef struct Noded{ struct Noded *next;//指针域 int data;//数据域 }Noded; 2.对链表进行初始化,链表为空(确保建立空链表)//链表初始化 void Init(Noded *head){ head...原创 2018-10-11 22:16:00 · 1752 阅读 · 0 评论 -
数据结构之顺序表的实现
本文为对顺序表的一些基本操作1.建立链表typedef struct Sqlist{ int length;//元素个数 int *elem;//基指针 int size;//当前容量 }Sqlist;2.实现对链表的初始化int Init(Sqlist *list){ list->elem = (int *)malloc(sizeof(int)*Msize);//动...原创 2018-10-11 19:07:01 · 579 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码和解码
哈夫曼树,又称最优树,是带权路径最小的树。基本概念:节点间的路径长度:两个节点间所包含的边的数目。树的路径长度:从根到树中任意节点的路径长度之和。权:将节点赋予一定的量值,该量值成为权。树的带权路径长度:树中所有叶子结点的带权路径长度。哈夫曼算法:给定一个保存权值的数组,求最优树的算法。对于此权值数组找出其中最小的权值和第二小的权值,用这两个权值创建树,并把这两个权值相加所得作为一个新...原创 2018-11-02 23:07:35 · 4834 阅读 · 3 评论