数据结构部分总结(c语言版)
这是一个
/*
此头文件适用于串
其中包括最基本的函数操作
OK代表成功
NO代表失败
FS为特殊失败的标志
注:此头文件中的初始化使用'0'代表结束的
使用者可以根据需要自行改变,最后一
个函数为KMP算法,可以根据需要使用
*/
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define NO 0
#define FS -1
typedef int Nowname;
typedef struct strand
{
char *chars;
int length;
}strand;
/*
初始化、赋值函数
*/
Nowname StrAssign(strand *T,char *chars){
//printf("%s",chars);
int sum ;
char *c;
for(sum = 0 , c = chars; *c != '0' ;c++,sum++)
{
//printf("1\n");
}
if(sum == 0)
{
T->chars = NULL;
}
else
{
T->chars = (char*)malloc(sizeof(char)*sum);
if(!T->chars)
{
printf("初始化申请空间失败!\n");
exit(NO);
}
for (int i = 0; i < sum; i++)
{
T->chars[i] = chars[i];
//printf("%c\n",T->chars[i]);
}
T->length = sum;
}
return OK;
}
/*
对串进行输出
*/
void Out(strand *S)
{
int num = 0;
while (num != S->length)
{
printf("%c",S->chars[num]);
num++;
}
printf("\n");
}
/*
长度输出函数
*/
Nowname Length(strand *T)
{
return T->length;
}
/*
字符串的连接函数
*/
void concat(strand *t,strand *s1,strand *s2)
{
//printf("1\n");
int j = 0;
t->length = s1->length+s2->length;
t->chars = (char*)malloc(sizeof(char)*t->length);
for (int i = 0,j = 0; i < s1->length; i++ , j++)
{
t->chars[j] = s1->chars[i];
//printf("%c\n",t->chars[j]);
}
j = s1->length;
for (int i = 0; i < s2->length; i++ , j++)
{
t->chars[j] = s2->chars[i];
//printf("%c\n",t->chars[j]);
}
}
/*
主串S的pos位置后长度为len的子串,用Sub返回
*/
strand * SubString(strand *Sub,strand *S,Nowname pos,Nowname len)
{
if(pos<1 || pos > S->length || len < 0 || len > S->length-pos+1)
{
printf("输入的位置错误!\n");
exit(NO);
}
for (int i = pos-1,j = 0; j < len; i++,j++)
{
Sub->chars[j] = S->chars[i];
}
Sub->length = len;
return Sub;
}
/*
返回子串T在主串S的第pos个位置后首次出现的位置
*/
int Index(strand *S,strand *T,int pos)
{
int num = pos-1;
int i = 0;
int sum = 0;
while ( num < S->length && i< T->length)
{
if(S->chars[num] == T->chars[i])
{
num++;
i++;
sum++;
}
else
{
i = 0;
num = num - sum + 1;
sum = 0;
}
//printf("%d\n",sum);
if(i == T->length)
{
return num-i+1;
}
}
return NO;
}
/*
串之间的比较
0 两个字符串相同
1 T大于S
-1 S大于T
*/
Nowname StrCompare(strand *T,strand *S)
{
for(int i = 0 ; i < T->length && i < S->length ; i++)
{
if(T->chars[i] > S->chars[i])
return OK;
else if(T->chars[i] < T->chars[i])
return FS;
}
if(T->length == S->length)
return NO;
if(T->length-S->length>0)
return OK;
else
return FS;
}
/*
清空串
*/
void Nullstrand(strand *T)
{
if(T->chars)
{
free(T->chars);
T->length = 0;
}
}
int * Next(strand *S,int *next)
{
/*
i = 1 a b c d e f s d
0 1 2 3 4 5 6 7
j = 0 a b c d e f s d
0 1 2 3 4 5 6 7
1.当j>0且next[i]!=next[j]时 让j=next[j-1]
2.当next[i]==next[j]时,让j++
3.每次执行完均执行next[i] = j;
*/
int j = 0, i = 1;
next[1] = 0;//初始化一下1
while (i<S->length)
{
while (j>0&&S->chars[i]!=S->chars[j])
{
j = next[j-1];
//printf("1\n");
}
if(S->chars[i] == S->chars[j])
{
j++;
//printf("2\n");
}
//printf("3\n");
next[i] = j;
i++;
}
//printf("4\n");
/*
右移,并且加1
*/
for(int i = S->length-1; i >=1 ; i--)
{
next[i] = next[i-1];
next[i]+=1;
}
next[0] = 0;
return next;
}
数据结构部分总结(c语言版)的更多相关文章
- md5加密算法c语言版
from: http://blog.sina.com.cn/s/blog_693de6100101kcu6.html 注:以下是md5加密算法c语言版(16/32位) ---------------- ...
- VS2015如何新建C++或者C语言版的lib文件
当我们不想公开我们的代码的时候,可以把我们的代码封装成静态数据连接库,即lib文件.下面介绍下如何生成lib文件. 以VS2015为例,一种是C++版的lib文件,一种是C语言版的lib文件. 一.按 ...
- 2048小游戏代码解析 C语言版
2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图: 游 ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- 数据结构(c语言版)代码
第1章 绪论 文档中源码及测试数据存放目录:数据结构\▲课本算法实现\▲01 绪论 概述 第一章作为绪论,主要介绍了数据结构与算法中的一些基本概念和术语.对于这些概念术语 ...
- 排序算法总结(C语言版)
排序算法总结(C语言版) 1. 插入排序 1.1 直接插入排序 1.2 Shell排序 2. 交换排序 2.1 冒泡排序 2.2 快速排序 3. 选择 ...
- C,LINUX,数据结构部分
1604期 第1期测试(面试精选:C,LINUX,数据结构部分) 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:24 ...
- 基于BP神经网络的简单字符识别算法自小结(C语言版)
本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前面的闲话: 自我感觉自己应该不是一个非常 ...
- GeoIP的使用-C语言版
0x00. 简介 GeoIP库可以根据IP地址(支持IPv4 和 IPv6), 定位该IP所在的 洲.经纬度.国家.省市.ASN 等信息. GeoIP目前已经升级到GeoIP2,GeoIP2有两个版本 ...
- 寒假答辩作品——掘地求升C语言版
寒假答辩—掘地求升(C语言版) 前言 这个是作为寒假答辩作品写的. 之前考虑过用Unity写个游戏,但毕竟不熟悉C#,感觉几乎都是在套模板,而且写着不顺手,有想法却只能 看着C#发呆,很是无奈,所以决 ...
随机推荐
- 解决 new file()在IOS下不兼容 的问题
最近 做项目,做的要是拍照后上传相片,以file格式上传..所以 拍照 后用canvas生成base64格式再转file..在PC和安卓都是没有问题,到IOS上面不行..new file后就是生成一个 ...
- 【转载】Gradle学习 第三章:教程
转载地址:http://ask.android-studio.org/?/article/15 3.1. Getting Started 入门The following tutorials intro ...
- h5和native测试时的区别
我们以往的APP是使用原生系统内核的,相当于直接在系统上操作,是我们传统意义上的软件,更加稳定 H5的APP先得调用系统的浏览器内核,相当于是在网页中进行操作,较原生APP稳定性稍差,似乎还没有百万级 ...
- Linux从入门到精通总结(非原创)
文章大纲 一.课程内容总结二.课程学习地址三.学习资料下载四.参考文章 一.课程内容总结 二.课程学习地址 第一天:https://www.cnblogs.com/WUXIAOCHANG/p/10 ...
- 在ubuntu更新时,出现错误E: Some index files failed to download, they have been ignored, or old ones used inst
原文:https://blog.csdn.net/tian_ciomp/article/details/51339635 在ubuntu更新时,出现错误E: Some index files fail ...
- Odoo视图的共有标签
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826405.html 1)name (必选) 通过name值,查找标签 2)model 与view相关联的 ...
- NGUI里的sprite和label有白色的边框
问题描述:NGUI里的sprite和label有白色的边框,而原图一切正常 如图: 解决方案: 给Sprite 边缘左右更增加1,这样拉伸的时候就忽略了左右1的位置,图片就不会显示白色边框了
- MongoDB基础知识与常用命令
SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 col ...
- 排序算法-插入排序(Java)
package com.rao.linkList; import java.util.Arrays; /** * @author Srao * @className InsertSort * @dat ...
- Shell编程——多命令顺序执行、管道、grep命令
1.多命令执行符: (1)命令1:命令2 多个命令顺序执行,没有逻辑联系,即使命令1出错,命令2依旧执行. (2)命令1&&命令2:只有命令1正确执行,命令2才能正确执行:命令1 ...