- 博客(17)
- 收藏
- 关注
原创 快排
对于非内部数据类型的对象(在这里指的是string)而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。所以这里(详情见实现文件)(要使用new,而不是malloc
2015-07-23 23:55:23
738
原创 哈希表
头文件:#ifndef HASHTABLE_H#define HASHTABLE_Htypedef int ElemType; //这里的ElemType只能为int,因为选取的散列函数为取模typedef struct{ ElemType * elemArray; int maxsize; int size;}HashTable;void InitHash(HashTab
2015-07-23 23:51:00
454
原创 二叉堆
二叉堆:性质为任意一个节点若其右儿子,则其儿子必均大于或小于该节点。(对于同一个堆,大则都大,小则都小,分别称为大根堆,小根堆)堆的几本操作包括插入和删除。插入:先假设将新节点插在整个堆(树)的末尾,然后比较其与其父节点的大小,对于小根堆来说,若其小于其根,则其交换其与根的位置。以新节点当前位置为初始位置,继续比较其与其新根大小,直到其小于其根为止。(整个过程被称为上滤)删除:首先删除
2015-07-23 22:46:33
797
原创 赫夫曼树编码实现
赫夫曼编码实现包括以下几个功能:(1) 初始化。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree.txt中。(2) 编码。利用已建好的哈夫曼树,对文件ToBeTra.txt中的正文进行编码,然后将结果存入文件CodeFil.txt中。(3) 译码。利用已建好的哈夫曼树将文件CodeFile.txt中的代码进行译码,结果存入文件Textfile.
2015-07-23 22:25:45
1311
原创 图的邻接表表示法及深度搜索与广度搜索
图的深度搜索类似于树的先序遍历,稍微修改即可利用递归实现。图的广度搜索类似于树的层序遍历,根据数据出入的特性,可以采用队列来实现。队列不使用容器,而采用之前自己写过的队列稍加修改后来使用。所以文件一共有五个,包括图头文件,图实现文件,队列头文件,队列实现文件,主函数文件。队列头文件:#ifndef MYQUEUE_H_ #define MYQUEUE_H_ #define
2015-07-23 22:10:25
903
原创 AVL树C语言实现
#ifndef AVLTREE_H_#define AVLTREE_H_#define FLOWOVER -1struct AVLTreeADT;typedef struct AVLTreeADT * AVLTree;//根指针,与节点指针本质一样typedef struct AVLTreeADT * AVLNode;//节点指针typedef int ElemType;//数据域
2015-05-20 20:59:03
689
原创 二叉查找树(C语言实现 )
二叉查找树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉查找树。在使用递归的时候,假如函数有返回值,记得接收返回值,并且保证函数在每个板块结束后都有return,以防出错。具体见Find、Insert、Delete等函数的实现过程。Find:通过比较根数据域的值和输入参数的大小递归调用
2015-05-18 19:01:20
571
原创 迷宫求解_栈的应用
#ifndef STACK_FOR_MAZE_H#define STACK_FOR_MAZE_H #include struct Node;typedef struct Node * Stack; //用于声明指向表头的指针 typedef struct Node * PtrToNode; //用于声明指向结构体(节点)的指针 typedef int ElementT
2015-04-25 12:27:55
582
原创 基数排序单链表实现(C语言)
头文件:/*基数排序,单链表实现*/#ifndef RADIX_SORT_H#define RADIX_SORT_H#include #define FLOWOVER -1#define LIST_EMPTY -2struct RadixSort;typedef struct RadixSort * List;typedef struct RadixSort * Node;
2015-04-05 09:59:18
4010
原创 以循环顺序表实现的队列ADT(C语言版)
分为三个文件,分别为头文件,实现文件,测试文件。//约定初始化时rear与front均为0,元素增加一个时,rear++,减少一个是front++//在结构体中添加变量length,以length = 0表示队列为空//引入辅助函数MyAdd()以处理下标循环的问题 头文件:#ifndef MYQUEUE_H_#define MYQUEUE_H_#def
2015-03-27 19:55:44
1184
转载 malloc()与 alloc()区别 (转)
malloc()与 alloc()C语言跟内存分配方式(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存
2015-03-27 19:08:32
493
原创 new/delete相关应用及注意事项
一、应用格式:type_name * pointer_name = new type_name [num_elements];delete [] pointer_name; //[]加不加取决于new有没有用[],两者必须对应。tips:1、delete仅仅释放指针指向的内存,而不删除指针本身。2、注意覆盖与新建的区别,代码如下:#incl
2015-03-23 10:02:00
423
原创 含表头的链表ADT(C语言版)
表头L为指针,指向一个结构体,L->next表示L指向的结构体中的结构的next域,这个next存储的是链表第一个节点的地址,所以L->next表示链表第一个节点的地址,所以L->next->element表示链表第一个节点element域中的值。当表头L(指针)作为自定义函数参数传入时,L是作为一个临时变量存在的,所以对L进行的操作,并不改变表头的地址本身。但是当L->next作为左值出
2015-03-22 23:18:34
801
原创 含表头的栈ADT(C语言版)
表头S为指针,指向一个结构体,S->next表示S指向的结构体中的结构的next域,这个next存储的是栈顶的地址,所以S->next表示栈顶地址,所以S->next->element表示栈顶的元素中的值。具体代码如下:#ifndef MYSTACK_H_#define MYSTACK_H_#include #include #include struct Node;type
2015-03-22 22:28:41
859
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人