- 博客(23)
- 收藏
- 关注
原创 采用十字链表存储的稀疏矩阵
题目描述当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储的结构来表示三元组的线性表了。因此,在这种情况下,采用链式存储结构表示三元组更为恰当。十字链表就是能够实现这样功能的一种数据结构。在十字链表中,每个非零元可以用一个包含5个域的结点表示。其中i、j和e这3个域分别表示该非零元所在的行、列和非零元的值,向右域right用来链接同一行中下一个非零元,而向下域down用
2017-05-28 16:26:20 7719 4
原创 行逻辑链接的矩阵乘法
题目描述对于一个稀疏矩阵,当需要频繁的随机存取任意一行的非零元时,则需要知道每一行的第一个非零元在三元组表中的位置。为此,可以将算法5.2中用来指示“行”信息的辅助数组cpot固定在稀疏矩阵的存储结构中。这种“带行链接信息”的三元组表即为行逻辑链接的顺序表。其类型描述如下:针对存储于行逻辑链接顺序表的稀疏矩阵,其矩阵相乘的算法与经典算法有所不同。因此,对于两个稀疏矩阵相乘(Q=M×
2017-05-28 16:24:36 2951
原创 稀疏矩阵快速转置
题目描述稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。而矩阵转置就是将矩阵行和列上的元素对换。参考算法5.1中的具体做法,令mu和nu分别代表稀疏矩阵的行数和列数,不难发现其时间复杂度为O(mu×nu)。而当非零元的
2017-05-22 18:47:09 6113 1
原创 稀疏矩阵转置
题目描述稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(行号和列号对)以及该元组的值构成。矩阵转置就是将矩阵行和列上的元素对换。现在就请你对一个稀疏矩阵进行转置。以下是稀疏矩阵转置的算法描述:图:稀疏矩阵转置的算法描述输入
2017-05-21 23:01:00 1082
原创 KMP字符串模式匹配算法实现
题目描述KMP算法是字符串模式匹配算法中较为高效的算法之一,其在某次子串匹配母串失败时并未回溯母串的指针而是将子串的指针移动到相应的位置。严蔚敏老师的书中详细描述了KMP算法,同时前面的例子中也描述了子串移动位置的数组实现的算法。前面你已经实现了子串移动的数组,现在就来利用该数组来实现KMP模式匹配。下面是相应的算法:图:KMP算法输入3组字符串,每组字
2017-05-21 22:57:25 1016
原创 KMP算法中的模式串移动数组
题目描述字符串的子串定位称为模式匹配,模式匹配可以有多种方法。简单的算法可以使用两重嵌套循环,时间复杂度为母串与子串长度的乘积。而KMP算法相对来说在时间复杂度上要好得多,为母串与子串长度的和。但其算符比较难以理解。在KMP算法中,使用到了一个next数组。这个数组就是在比较失配时母串指针不必回溯,而子串指针移动相应位置即可。我们给出书中next数组的算式表示以及算法,请你实现之。
2017-05-21 22:55:47 1927
转载 KMP算法Next数组计算
KMP算法是在最近这两年的软件设计师考试中才出现的。2次都是让求Next函数的序列(其实是)。先看看题吧。(2011年下半年上午题)(2012年上半年上午题)其实做这个题很简单,我先说说这个题里的各种概念。给定的字符串叫做模式串T。j表示next函数的参数,其值是从1到n。而k则表示一种情况下的next函数值。p表示其中的某个字符,下标从1开始。看等式左
2017-05-19 22:16:20 369
原创 字符串的插入
题目描述将一个字符串插入到另一个字符串当中。算法描述如下:图:字符串插入算法输入输入包括多个测试样例,每个一行,包括两个字符串(stra,strb)和一个整数 i。字符串仅由英文大小写字母或数字组成。输入的字符串长度不超过127。输出将后一个字符串插入到前一个字符串的第i个字符前。输出插入后的结果后换行。样例输入strng
2017-05-18 21:36:19 3313
转载 字符串的堆分配
为什么需要字符串的堆分配? 因为字符串的顺序存贮结构中,对字符串的操作,在字符串中插入一个子字符串,连接两个字符串以及串的替换操作,度可能会 出现空间的不足,而必须要舍弃部分数据的情况,而数组的空间如果分配的过大,又会浪费内存空间,为了避免顺序存贮结构的 局限性,可以使用动态内存分配的方式来表示串,并实现串的基本操作 什么是堆分配? 通常在函数中定义的变量,
2017-05-18 21:34:36 985
原创 字符串链接
将给定的字符串连接起来。书中的算法描述如下:图:字符串连接算法输入输入包括多对字符串,每对字符串占一行,用空格隔开。每个字符串只包含数字和英文字母大小写且长度不超过100。输出将后一个字符串连接到前一个字符串后面,如果结果字符串长度超过100,输出一行“Result String is cutted.”否则将结果字符串输出来。
2017-05-16 22:51:27 1122
原创 定位子串(二)
题目描述将子串在母串中第一次出现的位置找出来。图1:在母串中第pos个位置定位子串的算法图2:从母串中第pos个位置获得长度为len的子串输入若干对字符串,每对字符串占一行并用一个空格分开。前一个字符串为母串,后者为子串。字符串只包含英文字母的大小写。每个字符串不超过98个字符。输出输出子串在母串中首次出现的位置,如果母串中不包含子串则输出0。每个整数占一行。样例输入ACMCLUB ACMD
2017-05-16 19:07:44 1742 1
转载 C语言strcmp()函数:比较字符串(区分大小写)
头文件:#includestrcmp() 用来比较字符串(区分大小写),其原型为: int strcmp(const char *s1, constchar *s2);【参数】s1, s2 为需要比较的两个字符串。字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再
2017-05-15 21:22:56 3331 1
转载 C语言中返回的0和1
return不仅仅是返回的意思,它是结束并返回,也就是只要执行return就一定结束程序并且返回一个值。而C语言规定return0是结果是错的时候的推出。return1是正确时候的推出。比如我们求a/b,当我们输入a和b时,我们可以给定if(b=0) return 0;(也就是returnERROR;)当我们误输入时,输入了b为了,程序就返回0并退出了,不会再执行后面的a/b。
2017-05-15 21:21:18 11839
转载 函数声明
函数声明中的形参名往往被忽略,如果声明中提供了形参的名字,也只是用作辅助文档。另外要注意函数声明是一个语句,后面不可漏分号!C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。
2017-05-15 21:19:44 272
转载 C语言函数参数的传递详解
一、三道考题开讲之前,我先请你做三道题目。(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){ int tmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d\n", x, y);}main(){
2017-05-15 19:10:17 679
转载 c语言获取用户输入字符串是scanf和gets的区别
解释gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。1.scanf()所在头文件:stdio.h语法:scanf("格式控制字符串",变量地址列表);接受字符
2017-05-15 18:49:34 73554
转载 定位子串(一)
#include#includeint strloc(char str1[],char str2[]);int main(){ char str1[5],str2[20]; int loc; while(gets(str2)!=EOF&&gets(str1)!=EOF) { loc=strloc(str1,str2); if
2017-05-11 22:58:26 1870
原创 Hello world!
#include#includeint main(){printf("Hello,world!\n");system("Pause");return 0; }
2017-05-11 15:40:43 268
原创 遍历二叉树
#include#includetypedef char Elemtype;//定义二叉树的结点typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//建立二叉树,约定用户遵照先序遍历输入数据CreateBiTree(
2017-05-10 23:00:49 213
原创 八进制数
问题 L 算法3-1:八进制数时间限制: 1 Sec 内存限制: 128 MB[提交]题目描述将十进制数转换为八进制,并输出。图:将十进制数转换为八进制并输出输入输入包含若干十进制正整数。输出输出相应的八进制数,每个占一行。样例输入123789191002034
2017-05-07 15:23:16 705
原创 数据结构之一元多项式相乘
#include#includetypedef struct Node{ int coef; int expn; struct Node *next;}List;List *Creat(){ List *head,*p1,*p2; p1=p2=(List *)malloc(sizeof(List)); head=NULL; scanf("%d%d",&p1
2017-05-03 16:41:26 4790
原创 数据结构之单链表的冒泡排序
#include#includetypedef struct Node{ int data; struct Node *next;}List;List *Creat(){ int i,n; scanf("%d",&n); List *head,*p1,*p2; p1=p2=(List *)malloc(sizeof(List)); head=NULL;
2017-05-03 16:20:39 1830
原创 数据结构-单链表反转
#include#includetypedef struct Node{ int data; struct Node *next;}List;List *Creat(){ int i,m; scanf("%d",&m); List *head; List *p1,*p2; p1=p2=(List *)ma
2017-05-02 14:09:13 285
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人