栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言版数据结构- C语言实现串,含详细的源代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言版数据结构- C语言实现串,含详细的源代码

  • HString.h 头文件
#include 
#include 
//定义函数返回的类型
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//定义数据元素的类型为字符型
typedef int Status;
typedef char ElemType; 
//定义单链表的存储结构
typedef struct {
	char* ch;
	int length;
}HString;


Status StrAssign(HString &T, char* chars) {
//	if(T.ch != NULL) {
//		free(T.ch);
//	}
	int i;
	char* c;
	for(i=0,c=chars; *c; i++, c++);
	if(!i) {
		T.ch = NULL;
		T.length = 0;
	} else {
		if(!(T.ch=(char*)malloc(i*sizeof(char)))) {
			exit(OVERFLOW);
		}
		for(int j=0; jS.length || len<0 || len>S.length-pos+1) {
		return ERROR;
	}
//	if(Sub.ch != NULL) {
//		free(Sub.ch);
//	}
	if (!len) {
		Sub.ch = NULL;
		Sub.length = 0;
	} else {
		Sub.ch = (char*)malloc(len*sizeof(char));
		for (int j = 0,i = pos-1; j= T.length)return i - T.length+1;	//匹配成功
	else return 0;								//输出-1失败
}


exp-1 主程序:测试基本功能

#include "HString.h"


int main() {
	
	HString s;
	HString s1;
	printf("%sn", "(1)建立串");
	char str1[] = "abcdefghxyzhijklmn";
	char str2[] = "xyz";
	StrAssign(s, str1);
	StrAssign(s1, str2);

	printf("%s%sn", "(2)输出串s:", s.ch);
	printf("%s%dn", "(3)输出串s的长度:", StrLength(s));
	//将串s分为两个子串
	HString s_sub1;
	HString s_sub2;
	SubString(s_sub1, s, 1, 8);
	SubString(s_sub2, s, 9, StrLength(s)-8);
	printf("%sn", "(4)在串s的第9个字符位置插入串s1而产生s2");

	//将s1先与前部分的子串连接,得到temp,再将temp和后部分子串连接,从而实现插入操作
	HString s2;
	HString temp;
	Concat(temp, s_sub1, s1);
	Concat(s2, temp, s_sub2);
	printf("%s%sn", "(5)输出串s2:", s2.ch);
	
	printf("%sn", "(6)删除s的第2个字符开始的5个字符而产生串s2");
	StrDelete(s, s2, 2, 5);
	printf("%s%sn", "(7)输出串s2:", s2.ch);
	
	printf("%sn", "(8)删除s的第2个字符开始的5个字符替换成s1而产生串s2");
	HString s2_sub1;
	HString s2_sub2;
	SubString(s2_sub1, s2, 1, 1);
	SubString(s2_sub2, s2, 2, s2.length-1);
	Concat(temp, s2_sub1, s1);
	Concat(s2, temp, s2_sub2);
	printf("%s%sn", "(9)输出串s2:", s2.ch);
	printf("%sn", "(10)提取串s的第2个字符开始的10个字符而产生s3");
	HString s3;
	SubString(s3, s, 2, 10);
	printf("%s%sn", "(11)输出串s3:", s3.ch);
	printf("%sn", "(12)将串s1和s2连接起来而产生串s4");
	HString s4;
	Concat(s4, s1, s2);
	printf("%s%sn", "(13)输出串s4:", s4.ch);
	int next[10] = { -1,0,0,1,1,2,0,1 };
	int leng = Index_KMP(s, s1, 1, next);
	printf("%s%dn", "(14)输出串s1在主串s中的位置,如不存在输出0, 首元素的位置为:",leng);
	return 0;
	
}

  • 测试结果
  • exp-2 主程序:利用该结构进行字符加密解密
#include "HString.h"
HString A;
HString B;
char a[] = "abcdefghijklmnopqrstuvwxyz";
char b[] = "ngzqtcobmuhelkpdawxfyivrsj";


HString EnCrypt(HString p) {
	HString enCrypt_p;
	enCrypt_p.ch = (char*)malloc(p.length*sizeof(char));
	enCrypt_p.length = p.length;
	
	for (int i=0; i 
  • 测试结果
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290436.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号