数据结构部分总结(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#发呆,很是无奈,所以决 ...
随机推荐
- uni-app插件ColorUI步骤条
1. uni-app插件ColorUI步骤条 1.1. 前言 uni-app就不介绍了,前面几篇已经有所介绍,不知道的可以翻看我前面几篇博客 ColorUI-uniApp是uni-app的一款ui组件 ...
- 通过SOFA看Java服务端如何实现运行时的模块化
本文阅读时间大约7分钟. 今天我们谈谈SOFA模块化,首先看一段SOFA的介绍: SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 ...
- Ninja使用Visual Studio(cl.exe)构建
目录 Ninja基本步骤 Ninja在VS2015下的问题和解决 Ninja命令行参数 Ninja错误的调用了gcc Ninja基本步骤 Ninja的作用是加速构建,最初目的是替代make,现在Win ...
- shell 脚本命令之alias
1.alias的功能 设置一个别名,即为一个长命令起一个新的名字 2.alias的基本格式 alias alias_name='origin_command' alias是指定别名命令的关键字 a ...
- 第07节-开源蓝牙协议BTStack框架代码阅读(上)
首先来看一下,对于硬件操作,它是如何来进行处理的.在上篇文章中曾说过,在main函数里面它会调用硬件相关的代码,调用操作系统相关的代码.在BTStack中,可以搜索一下main.c,将会发现有很多ma ...
- 201871010110-李华《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 微信小程序中的事件
事件 说明 bindtap bindload 当图片载入完毕时触发,event.detail = {height, width} bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒 ...
- LoadRunner开发http协议接口之form表单脚本
loadrunner传form表单,用web_submit_data函数. Action() { // lr_start_transaction("hp_homepage"); / ...
- Kubernetes部署Spring Boot应用
SpringBoot项目 新建springboot项目 @RestController public class HelloWorldController { @RequestMapping(&quo ...
- jsp获取map
1.简单Map User user = new User(); user.setName("zmy"); user.setAge(); user.setBirthday(new D ...