数据结构 顺序串笔记
/* 数据结构——串笔记串:由零个或多个字符组成的有限序列。 串也有两种储存方式,顺序储存和链式储存 1.顺序表示的串——顺序串一般使用字符型数组储存。确定串的长度有两种方法。一是:在串的末尾加一个结束标记(在C语言中系统自动在串值的末尾加一个'\0'作为结束标记 ),再使用 strlen函数得到串的长度。二是:增加一个变量 len 用来储存串的长度。 */ // 顺序串的实现即基本操作 # include <stdio.h> # include <stdlib.h> # include <malloc.h>// 定义一个穿的最大长度 # define MAXSIZE 50 // 储存结构,此处采用增加一个变量 len 用来储存串的长度 struct String {char * str;int len; }; // 串的创建 void Create_String(String * S); // 串的初始化 void Init_String(String * S); // 串的赋值 void String_Assign(String * S, char * str); // 串的遍历 void Travel_String(String * S); // 判断串是否为空 bool Is_Empty(String * S); // 求串的长度 int String_Length(String * S); // 串的复制 void String_Copy(String * S, String * T); // 比较两个串的大小,返回两个串的长度的差值 int String_Compare(String * S, String * T); // 在串S的pos位置插入串T void String_Insert(String * S, String * T, int pos); // 删除串S中从位置pos开始的len个字符 bool String_Delete(String * S, int pos, int len); // 将串T连接到串S的末尾 void Strint_Concat(String * S, String * T); // 清空串 void String_Clear(String * S); int main(void) {String str1;Create_String(&str1);Init_String(&str1);char ch1[20] = "AAAA";String_Assign(&str1, ch1);Travel_String(&str1);return 0; }void Create_String(String * S) {S->str = (char *)malloc(sizeof(char) * MAXSIZE);if (NULL == S->str){printf("动态内存分配失败!\n");exit(-1);}return; }void Init_String(String * S) {S->len = 0;return; }void String_Assign(String * S, char * str) {int cnt;for (cnt = 0; str[cnt] != '\0'; ++cnt){S->str[cnt] = str[cnt];}S->len = cnt;return; }void Travel_String(String * S) {int i;for (i = 0; i < S->len; ++i){printf("%c", S->str[i]);}printf("\n");return; }bool Is_Empty(String * S) {if (0 == S->len){return true;}else{return false;} }int String_Length(String * S) {return S->len; }void String_Copy(String * S, String * T) {int i;S->len = T->len;for (i = 0; i < T->len; ++i){S->str[i] = T->str[i];}S->str[S->len] = '\0'; return; }int String_Compare(String * S, String * T) {int i;for (i = 0; i < T->len; ++i){if (S->str[i] != T->str[i]){return (S->str[i] - T->str[i]); //如果有不相等的字符,返回两字符的ASCII码差值 }}return (S->len - T->len); // 如果比较完毕,返回两串长度的差值 }void String_Insert(String * S, String * T, int pos) {int i;if ((pos < 0) || ((pos-1) > S->len)){printf("插入位置有误!\n");exit(-1);}// 细节说明 pos位置的下标为 pos,即是在S串的第pos个字符后面插入 if ((pos + T->len) <= MAXSIZE && (S->len + T->len) > MAXSIZE) // 子串T可完全插入,但位置不够,S串需要有字符被截取掉 {for (i = 0; i < (MAXSIZE - pos - T->len); ++i) // 原S串中从pos+1个字符开始有MAXSIZE - pos - T->len个字符需要后移 {S->str[MAXSIZE - i - 1] = S->str[MAXSIZE - T->len -i - 1];}for (i = 0; i < T->len; ++i){S->str[pos + i] = T->str[i];} S->len = MAXSIZE;}else if ((pos + T->len) > MAXSIZE) // 子串T不能被完整插入 {for (i = 0; i < MAXSIZE - pos; ++i) // 插入字符到串满 {S->str[pos+i] = T->str[i];}S->len = MAXSIZE;} else // 子串T可以被完全插入,且串S不需要截取 {for (i = 0; i < (T->len - pos); ++i) // 原S串中从pos+1个字符开始每个向后移T->len位 {S->str[S->len + T->len - 1 -i] = S->str[S->len - 1 - i];}for (i = 0; i < T->len; ++i){S->str[pos + i] = T->str[i];}S->len += T->len;} return; } bool String_Delete(String * S, int pos, int len) {int i;if (pos < 0 || len < 0 || pos + len - 1 > S->len){printf("删除位置不对!\n");return false;}else{for (i = pos+len; i <= S->len-1; ++i){S->str[i - len] = S->str[i];}S->len -= len;return true; } }void Strint_Concat(String * S, String * T) {int i;if (S->len + T->len <= MAXSIZE) // 连接后串的长度小于MAXSIZE {for (i = 0; i < T->len; ++i){S->str[S->len + i] = T->str[i];} S->len += T->len;}else // 连接后串的长度大于MAXSIZE {for (i = 0; i < MAXSIZE-S->len; ++i){S->str[S->len + i] = T->str[i];}S->len = MAXSIZE;} return; }void String_Clear(String * S) {free(S->str);S->str = NULL;S->len = 0; }
转载于:https://www.cnblogs.com/lnlin/p/6798559.html
数据结构 顺序串笔记相关推荐
- 数据结构源码笔记(C语言):Josephus问题之顺序表
/*josephus_seq.c*/ /*Josephus问题: 顺序表实现*/#include <stdio.h> #include <stdlib.h>#define FA ...
- 数据结构源码笔记(C语言):线性表的顺序表示
/* SeqList.c*/ /*线性表的顺序表示:函数实现*/#include <stdio.h> #include <stdlib.h> //#include " ...
- 数据结构源码笔记(C语言):顺序查找
//实现顺序查找的算法 #include<stdio.h> #include<malloc.h> #include<malloc.h>#define MAXL 10 ...
- 数据结构上机实践第八周项目1- 建立顺序串的算法库
建立顺序串的算法库 本次实践将建立顺序串的算法库,这样可以方便的将此算法运用于我们的所需的工程中,简化操作. 本次实践将用到多文件组织工程的建立,建立方法可以点击此处参照.(工程环境:Visual C ...
- 【数据结构】顺序串的插入算法,删除算法,连接运算,顺序串求子串算法
主函数自行添加 头文件 + 宏定义 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 串的顺序存储 type ...
- 【数据结构和算法笔记】串详解:c实现
空串: 长度为0 空格串:仅含空格字符,其长度为串中空格字符的长度 顺序串: 非紧缩格式:每个字只存一个字符 紧缩格式:每个字存放多个字符 操作与顺序表操作类似
- 严蔚敏《数据结构》——顺序串
顺序串,就是一个数组!!! 串的存储结构 #include<cstdio> #include<cstdlib>#define Status char #define MAXST ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 数据结构源码笔记(C语言):可变长度字符串的快速排序
//实现可变长度的字符串序列快速排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#define ...
最新文章
- 阿里云OSS上传图片实现流程
- 为什么导师不喜欢推荐老实人?这是我听过最醍醐灌顶的回答
- Joda-Time中两个日期之间的天数
- sdut-2732 小鑫の日常系列故事(一)——判断对错
- Codeforces Round #359 (Div. 2) D. Kay and Snowflake
- C#中使用FFMPEG切割、合并视频。
- 高等数学张宇18讲 第十二讲 常微分方程
- Symbian中的iScanCode和iCode
- Android 开发笔记2.0
- 《通关!游戏设计之道》给游戏编个故事
- Matplotlib 画图如何取消图边框
- seq2seq模型_具有注意力机制的seq2seq模型
- python使用pandas拆分excel表并导出(2)
- 一文了解半导体的过去、现在和未来
- SAND-MATIC 质押池将停用
- Appinum:在使用安卓模拟器定位页面元素时启动uiautomatorviewer.bat ,但是报错: Error while obtaining UI hierarchy XML file: c
- c2c网站开店的流程图_C2C网店策划书
- 全国高速公路一览表_拔剑-浆糊的传说_新浪博客
- BEA广州UG腐败日--1st time
- 一个前端工程师的docker之路
热门文章
- 资源管理器停止工作,自动重启
- main(int argc,char *argv[ ],char *env)参数详解
- asp.net mvc 2被遗忘的%:Html.AntiForgeryToken() %
- 敏捷、TDD(测试驱动开发)、OO--前奏
- Web后端学习笔记 Flask(8) WTForms 表单验证,文件上传
- Web前端JavaScript笔记(7)ECMA6新增数组方法
- kafka partition分配_logstash消费kafka数据,partition分配不均衡
- c语言编写一元二次方程
- E: Malformed line 60 in source list /etc/apt/sources.list (dist parse)
- 如何写出高性能的SQL语句,及如何进行SQL性能分析与调优