mirror of
https://github.com/kangjianwei/Data-Structure.git
synced 2026-09-28 15:48:55 +08:00
💡 顺序串、堆串、块链串
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{7D94FA2D-43E5-4EA0-AEBF-119C156C98FF}</ProjectGuid>
|
||||
<RootNamespace>My0401_SString</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<IncludePath>$(SolutionDir)\..\Status;$(IncludePath)</IncludePath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>$(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<SubSystem>Console</SubSystem>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="SString.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="SString-main.c" />
|
||||
<ClCompile Include="SString.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="源文件">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="头文件">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="资源文件">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="SString.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="SString.c">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SString-main.c">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
</Project>
|
||||
@@ -0,0 +1,137 @@
|
||||
#include <stdio.h>
|
||||
#include "SString.h" //**▲04 串**//
|
||||
|
||||
// 测试函数,打印字符串
|
||||
void PrintElem(SString S);
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
char* chars = "01234567899876543210";
|
||||
SString S, T, sub, V;
|
||||
int i;
|
||||
|
||||
printf("████████ StrAssign \n");
|
||||
{
|
||||
printf("█ 为顺序串 S 赋值...\n");
|
||||
StrAssign(S, chars);
|
||||
printf("█ S = ");
|
||||
PrintElem(S);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ StrEmpty \n");
|
||||
{
|
||||
StrEmpty(S) ? printf("█ S 为空!!\n") : printf("█ S 不为空!\n");
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ StrLength \n");
|
||||
{
|
||||
i = StrLength(S);
|
||||
printf("█ S 的长度为 %d \n", i);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ StrCopy \n");
|
||||
{
|
||||
printf("█ 复制 S 到 T ...\n");
|
||||
StrCopy(T, S);
|
||||
printf("█ T = ");
|
||||
PrintElem(T);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ StrCompare \n");
|
||||
{
|
||||
printf("█ 比较字符串 S 和 T ...\n");
|
||||
i = StrCompare(S, T);
|
||||
i == 0 ? printf("█ S==T\n") : (i < 0 ? printf("█ S<T\n") : printf("█ S>T\n"));
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ StrInsert \n");
|
||||
{
|
||||
StrAssign(T, "*****");
|
||||
printf("█ 将 \"*****\" 插入到串 S 的第 11 个位置处... \n");
|
||||
StrInsert(S, 11, T);
|
||||
printf("█ S = ");
|
||||
PrintElem(S);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ Index \n");
|
||||
{
|
||||
StrAssign(T, "*****");
|
||||
printf("█ 获取 \"*****\" 在串 S 中的第一次出现的位置...\n");
|
||||
i = Index_1(S, T, 1);
|
||||
printf("█ 串 \"*****\" 在 S 中第一次出现的位置为 %d \n", i);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ SubString \n");
|
||||
{
|
||||
printf("█ 用 sub 返回 S 中第 11 个字符起的 5 个字符...\n");
|
||||
SubString(sub, S, 11, 5);
|
||||
printf("█ Sub = ");
|
||||
PrintElem(sub);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ Replace \n");
|
||||
{
|
||||
StrAssign(T, "*****");
|
||||
StrAssign(V, "#####@@@@@");
|
||||
printf("█ 用 \"#####@@@@@\" 替换S中的 \"*****\" ...\n");
|
||||
Replace(S, T, V);
|
||||
printf("█ S = ");
|
||||
PrintElem(S);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ StrDelete \n");
|
||||
{
|
||||
printf("█ 删除 S 中第 16 个字符起的 5 个字符...\n");
|
||||
StrDelete(S, 16, 5);
|
||||
printf("█ S = ");
|
||||
PrintElem(S);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ ClearString \n");
|
||||
{
|
||||
printf("█ 清空 S 前:");
|
||||
StrEmpty(S) ? printf(" S 为空!!\n") : printf(" S 不为空!\n");
|
||||
|
||||
ClearString(S);
|
||||
|
||||
printf("█ 清空 S 后:");
|
||||
StrEmpty(S) ? printf(" S 为空!!\n") : printf(" S 不为空!\n");
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
printf("████████ Concat \n");
|
||||
{
|
||||
SString Tmp, S1, S2;
|
||||
|
||||
StrAssign(S1, "+++++");
|
||||
StrAssign(S2, "-----");
|
||||
|
||||
printf("█ 联接 \"+++++\" 和 \"-----\" 形成 Tmp ...\n");
|
||||
Concat(Tmp, S1, S2);
|
||||
printf("█ Tmp = ");
|
||||
PrintElem(Tmp);
|
||||
}
|
||||
PressEnterToContinue();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 测试函数,打印字符串
|
||||
void PrintElem(SString S) {
|
||||
int i;
|
||||
|
||||
for(i = 1; i <= S[0]; i++) {
|
||||
printf("%c", S[i]);
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,176 @@
|
||||
/*=============================
|
||||
* 串的定长顺序存储表示(顺序串)
|
||||
*
|
||||
* 包含算法: 4.1、4.2、4.3、4.5
|
||||
==============================*/
|
||||
|
||||
#ifndef SSTRING_H
|
||||
#define SSTRING_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h> // 提供strlen原型
|
||||
#include "Status.h" //**▲01 绪论**//
|
||||
|
||||
/* 宏定义 */
|
||||
#define MAXSTRLEN 255 // 顺序串的最大串长
|
||||
|
||||
/*
|
||||
* 串的顺序存储类型定义
|
||||
*
|
||||
* 注:有效元素从SString的1号单元开始存储
|
||||
* SString的0号单元用来存储其长度
|
||||
*/
|
||||
typedef unsigned char SString[MAXSTRLEN + 1]; // 0号单元存放串的长度
|
||||
|
||||
|
||||
/*
|
||||
* ████ 提示 ████
|
||||
*
|
||||
* 遵循教材的书写习惯,pos指示字符的位序(不是索引),从1开始计数
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* 初始化
|
||||
*
|
||||
* 构造一个值为chars的串T。
|
||||
*
|
||||
*【注】
|
||||
* 该操作属于最小操作子集
|
||||
*/
|
||||
Status StrAssign(SString T, const char* chars);
|
||||
|
||||
/*
|
||||
* 销毁
|
||||
*
|
||||
* 将串S销毁。
|
||||
*
|
||||
*【注】
|
||||
* 顺序串的结构无法销毁
|
||||
*/
|
||||
Status DestroyString(SString S);
|
||||
|
||||
/*
|
||||
* 清空
|
||||
*
|
||||
* 将串S清空。
|
||||
*/
|
||||
Status ClearString(SString S);
|
||||
|
||||
/*
|
||||
* 判空
|
||||
*
|
||||
* 判断串S中是否包含有效数据。
|
||||
*
|
||||
* 返回值:
|
||||
* TRUE : 串S为空
|
||||
* FALSE: 串S不为空
|
||||
*/
|
||||
Status StrEmpty(SString S);
|
||||
|
||||
/*
|
||||
* 计数
|
||||
*
|
||||
* 返回串S中元素的个数。
|
||||
*
|
||||
*【注】
|
||||
* 该操作属于最小操作子集
|
||||
*/
|
||||
int StrLength(SString S);
|
||||
|
||||
/*
|
||||
* ████████ 算法4.3 ████████
|
||||
*
|
||||
* 求子串
|
||||
*
|
||||
* 用Sub返回S[pos, pos+len-1]。
|
||||
* 返回值指示是否截取成功。
|
||||
*
|
||||
*【注】
|
||||
* 该操作属于最小操作子集
|
||||
*/
|
||||
Status SubString(SString Sub, SString S, int pos, int len);
|
||||
|
||||
/*
|
||||
* ████████ 算法4.1 ████████
|
||||
*
|
||||
* 查找
|
||||
*
|
||||
* 从pos处开始搜索模式串T在主串S中首次出现的位置,如果不存在,则返回0。
|
||||
* 如果查找成功,返回匹配的位置。
|
||||
*
|
||||
*【注】
|
||||
* 1.此实现需要依赖串的最小操作子集
|
||||
* 2.该实现比较低效
|
||||
*/
|
||||
int Index_1(SString S, SString T, int pos);
|
||||
|
||||
/*
|
||||
* ████████ 算法4.5 ████████
|
||||
*
|
||||
* 查找
|
||||
*
|
||||
* 从pos处开始搜索模式串T在主串S中首次出现的位置,如果不存在,则返回0。
|
||||
* 如果查找成功,返回匹配的位置。
|
||||
*
|
||||
*【注】
|
||||
* 1.此实现不依赖串的最小操作子集
|
||||
* 2.该实现比较低效
|
||||
*/
|
||||
int Index_2(SString S, SString T, int pos);
|
||||
|
||||
/*
|
||||
* 插入
|
||||
*
|
||||
* 将串T插入到主串S的pos位置处。
|
||||
*/
|
||||
Status StrInsert(SString S, int pos, SString T);
|
||||
|
||||
/*
|
||||
* 删除
|
||||
*
|
||||
* 删除S[pos, pos+len-1]。
|
||||
*/
|
||||
Status StrDelete(SString S, int pos, int len);
|
||||
|
||||
/*
|
||||
* 比较
|
||||
*
|
||||
* 比较串S和串T,返回比较结果。
|
||||
*
|
||||
*【注】
|
||||
* 该操作属于最小操作子集
|
||||
*/
|
||||
int StrCompare(SString S, SString T);
|
||||
|
||||
/*
|
||||
* 复制
|
||||
*
|
||||
* 将串S复制到串T。
|
||||
*/
|
||||
Status StrCopy(SString T, SString S);
|
||||
|
||||
/*
|
||||
* 替换
|
||||
*
|
||||
* 用V替换主串S中出现的所有与T相等的且不重叠的子串。
|
||||
*
|
||||
*【注】
|
||||
* 该操作依赖最小操作子集,效率较低。
|
||||
*/
|
||||
Status Replace(SString S, SString T, SString V);
|
||||
|
||||
/*
|
||||
* ████████ 算法4.2 ████████
|
||||
*
|
||||
* 串联接
|
||||
*
|
||||
* 联接S1和S2,并存储到T中返回。如果联接后的长度溢出,则只保留未溢出的部分。
|
||||
* 返回值表示联接后的串是否完整。
|
||||
*
|
||||
*【注】
|
||||
* 该操作属于最小操作子集
|
||||
*/
|
||||
Status Concat(SString T, SString S1, SString S2);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user