数据结构
bug--maker
立长志,不常立志
展开
-
稀疏矩阵快速转置算法分析
稀疏矩阵的相关知识矩阵通常是使用二维数组来进行模拟的,并且可以通过下标快速的访问二维数组里面的元素,但是矩阵里面包含大量重复元素的情况,使用二维数组就很浪费空间的;对于含有大量重复元素的矩阵,就可以使用稀疏矩阵的思想来进行处理,但是对于是否为稀疏矩阵,有没有特别严格的标准来进行判断,稀疏矩阵不在采用二维数组的方式进行处理,而是使用三元素来进行处理;typedef struct{ in原创 2017-10-16 22:41:39 · 3346 阅读 · 0 评论 -
多项式加法-->动态实现
前面多项式的加法实现使用的是数组进行实现的,这里介绍的使用链表进行实现的,使用链表进行实现更加高效;对于多项式使用链表来进行实现,首先应该解决的是创建多项式的问题;void CreatPolynomial(polyPointer *phead, polyNode item){ polyPointer temp = (polyPointer)malloc(sizeof(polyPoint原创 2017-11-09 20:25:41 · 479 阅读 · 0 评论 -
单端队列---->循环队列
队列队列是有序表的特殊情形,插入和删除只能够限定在表的两端进行操作,队列的插入使用put操作, 队列的弹出使用pop操作,插入端称为对尾rear,删除端称为队头front;对于队列来说常见的操作包括以下几种: 1.创建队列CreateQueue();2.判断队列是否为满IsFull();3.判断队列是否为空IsEmpty();4.在对尾添加元素Add();5.在队首删除元素Delet原创 2017-10-24 19:22:29 · 715 阅读 · 0 评论 -
栈---->动态实现
动态栈栈可以使用静态数组来模拟实现,但是使用静态数组时,栈的大小就必须是固定的,为了弥补这种局限性,栈可以使用动态存储空间,因为在使用过程中可移动台的调整大小;typedef struct{ int key;}element;element* stack;MALLOC(stack,sizeof(stack));动态存储空间的扩容问题,一般来说当栈满之后,直接执行的是加倍策略;v原创 2017-10-24 16:38:12 · 462 阅读 · 0 评论 -
多项式系数相加
首先看看多项式的存储问题: 多项式包含三个元素需要进行存储:系数:通常需要是float类型,指数先存储为int类型,还有就是变量X的值,假定为int类型;对于上面元素的存储使用结构体数组来表示;typedef struct{ float coef; int expon;} polynomial;polynomial terms[MAX_TERM];int avail =原创 2017-10-16 17:10:11 · 1772 阅读 · 0 评论 -
矩阵
矩阵矩阵在数学问题中有大量的问题需要通过矩阵问题进行求解,矩阵表示的是由NxM组成的一个矩阵,N和M不要求相等,如果等于就称为方阵;对于矩阵来数存在常见的几种运算,创建矩阵,矩阵相加,相乘,转置等;矩阵的创建可以使用二维数组来模拟矩阵;int array[5][5] = { {1, 0, 0, 0, 1}, {1, 5, 0, 0, 0},原创 2017-10-16 17:28:21 · 294 阅读 · 0 评论 -
动态循环队列的实现--->单端队列
上述通过数组实现的循环队列申请的空间是固定的,在使用的过程中无法随时进行更改,这里希望通过动态数组的方式来实现循环队列;需要特殊考虑的是加倍技术,也就是在队列使用过程中的动态扩容,参照栈的实现,需要使用malloc函数realloc函数来实现,但是初始队列里面可能已经包含元素,所以这里需要考虑的是将元素需要进行复制;原始队列为满;这里有一个位置是不填充元素的,首先将这个从下标0,也就是C的位置原创 2017-10-24 20:23:19 · 1152 阅读 · 0 评论 -
链表基本操作
动态内存的相关知识链表的知识预备:关于动态存储单元的分配,malloc函数的使用,free函数的使用;malloc(字节数):用于在对上面的空间分配连续的空间,如果分配成功,返回值是当前字节的首地址,如果分配失败,返回值为NULL;对于首地址的字节返回值类型是void *,所以在进行使用时,必须进行强制类型转换,在进行接收时,必须使用指针变量进行接收;动态内存的使用过程:int *p=NU原创 2017-11-03 18:35:34 · 413 阅读 · 0 评论 -
栈的动态实现
栈的动态实现栈是一种先进后出的数据结构,已经使用数组实现过栈,这里通过链表来实现栈;对于栈来说,添加元素和删除元素都在一端进行,所以实现过程是比较容易的;按照栈的数据结构要求首先需要实现一下几种操作: 1.栈的初始化操作CreateStack();2.添加元素操作push();3.删除元素操作pop();4.访问栈顶元素top();5.栈的大小判断操作StackSize();首先需原创 2017-11-05 10:18:09 · 493 阅读 · 0 评论 -
多重队列的实现
前面使用单个数组随机访问的方式实现了多重栈的基本操作,这里通过来两个数组来随机访问实现多重队列;这里需要两个数组,因为队列需要添加元素和删除元素在不同的一端QueueNode front[MAX_SIZE] = {NULL}, rear[MAX_SIZE] = {NULL};首先是队列添加元素的操作:void QueueAddq(int i, element item){ Queue原创 2017-11-09 19:40:57 · 602 阅读 · 0 评论 -
多重栈的实现
前面介绍的栈的实现可以用于实现单个栈,并且实现站得操作,接下来介绍多重栈的实现,也就是一次向创建N个栈用于模拟栈的功能,并且实现相关操作;多重栈的实现最重要的实现实现通过下标对于各个栈的访问,也就是需要通过数组下标的方式来随机性的访问各个栈;首先需要定义一个数组来进行栈的下标随机访问;StackNode top[MAX_SIZE] = {NULL};* 通过top的下标完成栈的随机访问工作;原创 2017-11-09 19:29:20 · 818 阅读 · 0 评论 -
数据结构--->字符串插入函数
字符串是有单个字符组合而成的,字符串的结尾是使用\0来表示的,'\0'表示的含义是一个字符;#define MAX_SIZEchar *s[MAX_SIZE]="dog";其实上面的字符在进行存储时,是dog\0对于字符创来说,支持的操作包括:创建char s[]="hello";;字符串拼接char *strcat(char *dest,char *src),函数的返回值是dest的指针原创 2017-10-17 10:43:47 · 3138 阅读 · 0 评论 -
数据结构-->数组
数组数组通常理解成为连续的存储单元的集合,但并不仅仅如此,数组还应该是<index,value>二元组有限index和value之间的映射;对于数组的抽象类型来说,还应该支持两个标准操作:取值和赋值;C语言的数组是这样定义的int list[5];int list *plist[5];int list[5]:表示的含义是5个整型值组成的数组,int *plist[5]表示的是5个整型指针原创 2017-10-11 20:20:24 · 229 阅读 · 0 评论 -
数据结构-->结构体
#include<stdio.h>#include<stdlib.h>#include<string.h>#define true 1#define false 0//使用struct可以聚合不同数聚类性的数据,结构表示的是数据项的集合,每条数据项由其类型和名称指定;struct { char name[10]; int age; float salary;}pe原创 2017-10-13 22:25:13 · 908 阅读 · 0 评论 -
数据结构-->栈-数组实现
数据结构—>栈栈同样也是有序表,但是插入,删除操作限定在表的同一端,向栈里添加元素的操作称为入栈push,从栈里面删除元素的操作称为出栈pop;当元素入栈之后,最里面的元素称为栈底,最上面的元素称为栈顶元素,对于元素的插入和删除操作都是在栈顶完成的;栈顶元素的指针称为top,栈具有的特性称为后入先出LIFO;关于系统工作栈: 程序在运行时,系统工作栈wi函数传递参数提供存储空间....原创 2017-10-19 20:24:58 · 457 阅读 · 0 评论 -
数据结构--杂记-二分查找
介绍二分查找之前,首先看看简单的数值比较的两种实现; 二分查找查找重复值,C++查找重复值的例子原创 2017-10-10 09:52:01 · 400 阅读 · 0 评论 -
数据结构-杂记--递归浅谈
浅谈递归人用迭代,神用递归,介绍一下递归的基础知识,再加上几道题,加深自己对于递归的理解;递归通常的理解就是函数里面的代码循环调用自身的代码,但是实际上还是存在间接递归这种说法的;间接递归表示的就是函数A调用函数B,函数B在调用函数A这种形式;需要使用递归的场合的情况判定: 如果问题本身是通过递归进行定义的,那么就应该使用递归进行解决;首先看这样一个例题,这是用来计算二项式系数的,二项式稀原创 2017-10-10 18:32:31 · 212 阅读 · 0 评论 -
数据结构--数据抽象
C语言除了内置类型还提供了两种聚合数据类型:数组,结构题;首先解释一下数据类型:数据类型是数据对象和施加在数据对象上面操作的聚合体; 偶数阶幻方1.首先包含两个部分:数据对象和数据对象的操作,这个类似于C++的类,类里面就是用来定义数据对象和数据对象的操作,可以说类是数聚类型的一个实现;抽象数据类型中的数据对象和数据操作的规范声明与数据对象的表示和操作的实现相互分离;对于抽象数据类型中的功能实现,也就原创 2017-10-10 19:42:46 · 1314 阅读 · 0 评论 -
数据结构-杂记--选择排序
动态存储空间 c语言允许在程序运行时,进行存储空间的分配,这段空间就是系统堆;通常申请动态内存空间使用的函数是malloc,函数在系统空闲内存空间中分配到合适的空间后,返回这段空间的首地址,也就是这种类型的指针值,在进行内存空间的申请时,需要指定数据空间的类型,如果函数分配空间失败,那么返回值就是NULL;#include<stdio.h>#include<stdlib.h>int main原创 2017-10-09 22:01:46 · 889 阅读 · 0 评论 -
线索二叉树
在找线索二叉树的过程中,这篇博客很值得推荐;http://waret.iteye.com/blog/709779转载 2017-12-03 11:56:24 · 191 阅读 · 0 评论