当前位置:文档之家› 串的基本操作

串的基本操作

串的基本操作
串的基本操作

一.实验目的

如果计算机语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。试着实现串类型,并写一个串的基本操作演示系统。

二.实验内容

实现若干串的常用基本操作,如串赋值、求串长、串替换、串比较、求子串及串的模式匹配等。模块设计

本程序包含两个模块:主程序模块、串操作模块。其调用关系如图2所示。

图2 模块调用关系示意图

三.实验步骤(可选)

数据类型定义

(1) 字符串的定义

typedef struct

{

char *ch; //串存放的数组

int curLen; //串的长度

}HString;

(2) 全局变量声明

#define OK 1 //操作成功

#define OVERFLOW 0 //溢出

#define ERROR 0 //出错

系统主要子程序详细设计

(1)主程序模块设计

主函数。设定用户操作界面,调用操作模块函数。

void main()

{

输出操作菜单;

Switch (1)

{

输出操作序号c;

switch (c)

{

调用相应函数执行相应操作;

输出操作结果;

}

}

}

(2)求子串

int substring(HString &Sub,HString S,int pos,int len)

{ //′串sub返回串S的第pos个字符起长度为len的子串int i;

if(pos<0||pos>S.curLen||len<0||len>S.curLen-pos)

{ //若位置或长度不合法,退出

printf("输入不合法\n");

exit(OVERFLOW); //退出

}

else

{

if(Sub.ch) free(Sub.ch); //释放子串sub原有空间

if(!len) //若长度len为0

{ //就爱那个子串置为空串Sub.ch=NULL;

Sub.curLen=0;

}

else //若长度len不为0

{

Sub.ch=(char*)malloc(len*sizeof(char));

for(i=0; i

{ //从串S的第pos个字符开始依次复制其后长度为len的字符串sub中Sub.ch[i]=S.ch[pos-1+i];

Sub.curLen=len; //修改串sub的串长

}

}

return OK;

}

}

(3)子串定位(串的模式匹配)

int Index(HString &ob1,HString &ob2,int pos)

{ //判断从第pos个字符起,ob2是否为ob1的子串

//若是返回ob2在ob1中的起始位置,否则返回-1

if(pos<0||pos>ob1.curLen)

{//若输入的数值pos不在ob1的串长范围内

printf("输入有误\n");

exit(ERROR);

}

for(int i=pos-1; i<=StrLength(ob1)-StrLength(ob2); i++)

{ //从ob1的第pos个字符起查找子串ob2

int j=0; //从ob2的第一个字符起开始查找

while(j

if(ob1.ch[i+j]==ob2.ch[j]) //若找到匹配字符

j++; //则依次向后查找

else break; //一旦失配,则跳出查找,此时j还未能达到子串串长}

if(j==StrLength(ob2)) //若j达到子串串长,即ob2的所有字符都能和ob1匹配return i; //返回ob2在ob1的起始位置i

}

return -1; //ob2不是ob1的子串,返回-1

}

(4)串替换

void Replace(HString &ob1,HString &ob2,HString &ob3)

{ //将原串ob1的所有子串ob2都替换为插入串ob3

printf("原串:");

for(int i=0; i

printf("%c",ob1.ch[i]);

printf("\n 子串:");

for(int j=0; j

printf("%c",ob2.ch[j]);

printf("\n");

printf("插入串:");

for(int k=0; k

printf("%c",ob3.ch[k]);

printf("\n");

int len=StrLength(ob2); //ob2的长度

while(Index(ob1,ob2,0)!=-1) //当ob2是ob1的子串,替换所有的ob2 {

int len2=StrLength(ob3)+StrLength(ob1)-StrLength(ob2); //新串的长度

int i=Index(ob1,ob2,0); //调用子串定位函数

char *p=new char[StrLength(ob1)-i-len+1]; //临时数组

char *q=new char[len2]; //存储新串的数组

for(int j=i+len; j

p[j]=ob1.ch[j]; //将不用替换的后部分存入数组p

for(int k=0; k

q[k]=ob1.ch[k]; //将不用替换的前部分存入数组q for(int m=i; m

q[m]=ob3.ch[m-i]; //替换子串

int b=i+len;

for(int n=i+StrLength(ob3); n

{ //将不用替换的后部分存入数组q

q[n]=p[b];

b++; //数组q存储着新串}

ob1.curLen=len2;

for(int l=0; l

ob1.ch[l]=q[l]; //将新串赋值给ob1做循环替换}

printf("新串:");

for(int h=0; h

printf("%c",ob1.ch[h]);

}

(5)串比较

int Compare(HString s1, HString s2)

{ //若s1s2则返回值>0

int i;

for(i=0; i

if(s1.ch[i]!=s2.ch[i])

return (s1.ch[i]-s2.ch[i]);

return (s1.curLen-s2.curLen);

}

四.实验的结果及分析。

各子系统测试运行结果如下。

1.赋值(A-Assign)

在主菜单下,输入A hello!并回车,运行结果如图4所示。

图4字符串赋值

2.求长度(L-Lengh)

在主菜单下,输入L student并回车,运行结果如图5所示。

图5求字符串长度

3.求子串(S-SubString)

在主菜单下,输入S student 2 5 并回车,运行结果如图6所示。

图6求子串

4.子串定位(I-Index)

在主菜单下,分别输入I microsoftvisualc++ soft 1并回车和I microsoftvisualc++ soft 8,运行结果如图7所示。

图7子串定位

5.替换(R-Replace)

在主菜单下,输入R chicken c t并回车,运行结果如图8所示。

图8字符串替换

6.判相等(C-Compare)

在主菜单下,分别输入C on in并回车和C on on并回车,运行结果如图9所示。

图9判两串相等

五.实验中出现的问题、解决方法和心得体会

通过这次的程序设计,对串的实际应用有了初步的认识了解,以及对各种串的运算方法也得到了加强,在程序设计过程中也碰到过一些问题,比如串的存储结构的选择,在这里选用了顺序的存储结构主要是方便了比较操作,同时通过这次实验,自己的编程能力也得到了提高,知识也得到了巩固。

C语言数据结构串的基本操作

实验九串的基本操作 #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars 的长度i if(!i) { // chars的长度为0 (*T).ch = NULL; (*T).length = 0; } else { // chars的长度不为0 (*T).ch = (char*)malloc(i*sizeof(char)); // 分配串空间 if(!(*T).ch) // 分配串空间失败 exit(0); for(j = 0; j < i; j++) // 拷贝串 (*T).ch[j] = chars[j]; (*T).length = i; } return 1; } // 由串S复制得串T int StrCopy(HString *T,HString S) { int i; if((*T).ch) free((*T).ch); // 释放T原有空间 (*T).ch=(char*)malloc(S.lengt h*sizeof(char)); // 分配串空间if(!(*T).ch) // 分配串空间失 败 exit(0); for(i=0;i

串的基本操作

串的基本操作 一、实验目的、意义 (1)理解串的堆分配存储结构。 (2)理解用它们表示时插入,生成串,联接串与求子串的算法。 (3)根据具体问题的需要,能够设计出相关算法。 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: 定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串等。 三、实验所涉及的知识点 C语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接串与求子串的算法。 四、实验结果及分析 (所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。) 五、总结与体会

(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。) 调试程序时,出现了许多错误。如:串的堆分配存储结构、串的联接等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。 六、程序清单(包含注释) #include #include #include typedef char Status; int strlen(char *p) { int i=0; while(*p++)i++; return i; } typedef struct { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }HString; // 初始化(产生空串)字符串T void InitString(HString *T) { (*T).length=0; (*T).ch=NULL; } // 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars) { int i,j; if((*T).ch) free((*T).ch); // 释放T原有空间 i = strlen(chars); // 求chars的长度i if(!i)

数据结构《第4章 串存储与基本操作的实现》

第四章串存储与基本操作的实现 本章学习要点 ◆熟悉串的相关概念以及串与线性表的关系 ◆重点掌握串的定长存储、堆分配存储的表示方法与基本操作的实现 ◆了解串的各种存储结构,能根据需要合理选用串的存储结构解决实际问题 “串”(string),是字符串的简称,它是一种特殊的线性表,其特殊性在于组成线性表的数据元素是单个字符。字符串在计算机处理实际问题中使用非常广泛,比如人名、地名、商品名、设备名等均为字符串。同样在文字编辑、自然语言理解和翻译、源程序的编辑和修改等方面,都离不开对字符串的处理。 4.1串的基本概念 4.1.1串的概念 1.串的定义 串(string)是由n个字符组成的有限序列,记为:S=”a0a1a2…a n-1” (n≥0)。 其中,S是串的名字,字符序列a0a1a2…a n-1是串的值,a i(0≤i≤n-1)可以是字母、数字或其他字符元素;由于在C语言系统中数组元素的下标是从0开始的,所以串中所含元素的序号等于该元素的下标值加1;串中所含字符的个数n称为该串的长度,长度为0的字符串称为空串(null string)。 从串的定义可以看出,串实际上是数据元素为字符的特殊的线性表。 例如: (1)A=“X123” (长度为4的串) (2)B=“12345654321” (长度为11的串) (3)C=“Bei Jing” (长度为8的串) (4)D=“” (长度为0的空串) (5)E=“This is a string” (长度为16的串) (6)F=“ is a ” (长度为6的串) 2.子串、主串和位置 串中任意连续的字符组成的子序列称为该串的子串;相应地,包含子串的串称为主串。串中的字符在串序列中的序号称为该字符在该串中的位置;子串的第一个字符在主串中的位置称为子串在主串中的位置。显然,串为其自身的子串,并规定空串为任何串的子串。显然,在不考虑空子串的情况下,一个长度为n的字符串具有n(n+1)/2个子串。 例如: 在上例的(6)中串F就是(5)中串E的子串,且子串F在主串E中的位置是5。由于空格符也是一个字符,所以在串G=“abc defghne”中包含有子串“c def”,而串“cdef”不是串G的子串。串G中第一个字符…e?的位置是6,第二个字符…e?的位置是11。 3.串的比较 如果两个串的长度相等且对应位置上的字符相同,则称这两个串相等。两个串A、B的比较过程是:从前往后逐个比较对应位置上的字符的ASCII码值,直到不相等或有一个字符串结束为止,此时的情况有以下几种: (1)两个串同时结束,表示A等于B; (2)A中字符的ASCII码值大于B中相应位置上字符的ASCII码值或B串结束,表示A大于B;(3)B中字符的ASCII码值大于A中相应位置上字符的ASCII码值或A串结束,表示A小于B。

串的基本操作

1上机实训3:串的基本操作 一、实训目的 通过实训,掌握串的运算(赋值,比较,联结,插入子串,模式匹配……等) 二、实验理论知识 1)串的基本概念及其含义 串( string)是由零个或多个字符组成的有限序列,一般记作: s='a1a2…an'(n≥0),其中s为串的名字,用单引号括起来的字符序列为串的值;ai(1≤i≤n)可以是字母、数字或其它字符(取决于程序设计语言所使用的字符集);n为串中字符的个数,称为串的长度。 2)串的存储表示及其实现 ●顺序存储 可以用一组地址连续的存储单元依次存放串的各个字符,这是串的顺序 存储结构,也称为顺序串 ●链式存储 和线性表的链式存储结构相类似,也可采用链表方式存储串值。串的这 种链式存储结构简称为链串。用链表存储字符串,每个结点需要有两个 域:一个数据域(data)和一个指针域(Next),其中数据域存放串中的 字符,指针域存放后继结点的地址。 3)模式匹配问题 三、实训案例与分析 【实例1】串的存储与基本运算 【实例分析】在本实例中练习计算字符串的长度、字符串的复制、字符串的比较、字符串的连接、字符串的插入等基本操作。在设计时 1)编写一个菜单函数,根据不同情况做(1-5)不同选择。 2)如果选择1,即要求计算输入字符串的长度。 3)如果选择2,完成字符串的复制。 4)如果选择3,完成字符串的比较。 5)如果选择4,完成两个字符串的连接。 6)如果选择5,字符串的插入。 【参考程序】 #include #define MAX 128

typedef enum {fail,success} status; typedef enum {false,true} boolean; main() { int strlen(); void strass(); boolean strcmp(); status strcat( ); status strins(); int t,n,i; boolean b; status st; char s[MAX],s1[MAX],s2[MAX]; printf("\n1. The length of string\n"); printf(" 2. The assignment of string\n"); printf(" 3. A string compare with another string:\n"); printf(" 4. A string connect with another string:\n"); printf(" 5. A string to be inserted into another string\n"); printf(" Please input a operation:");/*输入操作选项*/ scanf("%d",&t); switch(t) { case 1: printf("please input a string:\n"); getchar(); gets(s); n=strlen(s); printf("the length is: %d",n); break; case 2: printf("please input the first string:\n"); getchar(); gets(s1); printf("please input the second string:\n"); getchar(); gets(s2);

(完整版)Excel表格的基本操作[初学者专用]超级技能

目录 技巧1、单元格内强制换行 技巧2、锁定标题行 技巧3、打印标题行 技巧4、查找重复值 技巧5、删除重复值 技巧6、快速输入对号√ 技巧7、万元显示 技巧8、隐藏0值 技巧9、隐藏单元格所有值。 技巧10、单元格中输入00001 技巧11、按月填充日期 技巧12、合并多个单元格内容 技巧13、防止重复录入 技巧14、公式转数值 技巧15、小数变整数 技巧16、快速插入多行 技巧17、两列互换 技巧18、批量设置求和公式 技巧19、同时查看一个excel文件的两个工作表。技巧20:同时修改多个工作表 技巧21:恢复未保存文件 技巧22、给excel文件添加打开密码 技巧23、快速关闭所有excel文件 技巧24、制作下拉菜单 技巧25、二级联动下拉 技巧27、删除空白行 技巧28、表格只能填写不能修改 技巧29、文字跨列居中显示 技巧30、批注添加图片 技巧31、批量隐藏和显示批注 技巧32、解决数字不能求和 技巧33、隔行插入空行 技巧34、快速调整最适合列宽 技巧35、快速复制公式 技巧36、合并单元格筛选

技巧1、单元格内强制换行 在单元格中某个字符后按alt+回车键,即可强制把光标换到下一行中。 技巧2、锁定标题行 选取第2行,视图 - 冻结窗格 - 冻结首行(或选取第2行 - 冻结窗格)冻结后再向下翻看时标题行始终显示在最上面。 技巧3、打印标题行 如果想在打印时每一页都显示标题,页面布局 - 打印标题 - 首端标题行:选取要显示的行

技巧4、查找重复值 选取数据区域 - 开始 - 条件格式 - 突出显示单元格规则 - 重复值。 显示效果:

实验三 串基本操作的实现

实验三串基本操作的实现 专业:计算机科学与技术班级:10计本1班学号:姓名: 实验地点: B102 实验时间: 2011.11.2 指导教师:王润鸿 实验目的 1 理解定长顺序串的存储结构及基本操作的定义; 2掌握定长顺序串的基本操作; 3学会设计实验数据验证程序。 实验环境 计算机,window xp操作系统,VC++6.0 实验内容 1. 存储结构定义: #define MAXSTRLEN 255 //串的长度最大为255 typedef unsigned char SString[MAXSTRLEN+1]; //0号单元存放串的长度,其最大值刚好是255 2. 实现的基本操作: StrAssign (&T, chars) 初始条件:chars 是串常量。 操作结果:赋于串T的值为chars。 StrCopy (&T, S) 初始条件:串S 存在。 操作结果:由串S 复制得串T。 DestroyString (&S) 初始条件:串S 存在。 操作结果:串S 被销毁。 StrEmpty (S) 初始条件:串S 存在。 操作结果:若S 为空串,则返回TRUE,否则返回FALSE。 StrCompare (S, T) 初始条件:串S 和T 存在。 操作结果:若S>T,则返回值=0;若S=T,则返回值<0;若S

顺序表的建立及其基本操作技巧

山东师范大学 实验报告 课程:数据结构班级:2016级通信2班实验序号: 1 姓名:韩明达 学号: 201611030230 实验日期:9.17 题目: 顺序表的建立和运算 一、实验目的和要求 (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握线性表的顺序存储结构的定义及基本运算 二、实验环境 Windows10,Visual Studio 2017 三、实验内容及实施 实验内容 1、建立一个顺序表,输入n个元素并输出; 2、查找线性表中的最大元素并输出; 3、在线性表的第i个元素前插入一个正整数x; 4、删除线性表中的第j个元素; 5、将线性表中的元素按升序排列; 【程序流程图】

【程序】 #include #include using namespace std; #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef struct { //定义顺序表结构 int data[MAXSIZE]; //存储空间的基地址; int length; //当前表长 }SqList; int InitList(SqList &L) //初始化顺序表 { L.length = 0; //当前长度为0 return OK; } void ShowList(SqList &L) //显示顺序表 { cout << "您构建的顺序表为:" << endl; //提示int i; for (i = 0; i < L.length; i++) { cout << L.data[i] << " ";

数据结构3-串及其应用.

实验3:串及其应用 一、实验目的 掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。 二、问题描述 全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。用户可完成对文本的插入、删除、修改等功能。 三、实验要求 1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移 至文件首、尾;光标移至本行首、尾。 2、实现基本编辑命令: I----在当前光标前插入内容,按ESC结束 F----在当前光标后插入内容,按ESC结束 D----删除光标所在行 ND---删除光标位置开始的n行 N-----删除光标上的字符 W----将修改后的文本保存下来 Q----退出编辑状态。 四、实验环境

PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境 五、实验步骤 1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。 2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序 中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。 3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区; 4、操作确定后,将修改后的文本存到文件中。 六、测试数据 自行设定。 七、实验报告要求 实验报告应包括以下几个部分: 1、问题描述; 2、算法的设计描述; 3、测试结果的分析与讨论。 4、设计与实现过程中的体会,进一步的改进设想。 5、实验总结。

八、思考题 1、对命令格式非法等错误做严格检查和适当处理。 2、扩充编辑操作,如对某行进行串替换?

顺序表的基本操作

《数据结构》实验报告一 顺序表的基本操作 班级:网络工程学号:12015242183 实验日期:2016.9.25 姓名:邓宗永 程序文件名及说明:sequenlist 顺序表 一、实验目的 1、掌握使用Turbo C3.0上机调试线性表的基本方法; 2、掌握顺序表的基本操作:插入、删除、查找以及线性表合并等运算。 二、实验要求 1、认真阅读和掌握实验的程序。 2、上机运行程序。 3、保存和打印出程序的运行结果,并结合程序进行分析。 4、按照你对线性表的操作需要,编写写主程序并运行,打印出文件清单和运行结果 三、注意事项: 在磁盘上创建一个目录,专门用于存储数据结构实验的程序。 四、实验内容 1.顺序表的查找、插入与删除。设计算法,实现线性结构上的顺序表的产生以及元素的查找、插入与删除。具体实现要求: (1)从键盘输入10个整数,产生顺序表,并输入结点值。 (2)从键盘输入1个整数,在顺序表中查找该结点的位置。若找到,输出结点的位置;若找不到,则显示“找不到”。 (3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x 插入在对应位置上,输出顺序表所有结点值,观察输出结果。 (4)从键盘输入1个整数,表示欲删除结点的位置,输出顺序表所有结点值,观察输出结果。 五、实验报告必须写明内容 1.程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设 计,符号名说明等) 程序的结构:通过子函数实现输出,删除,插入,查找等功能,高耦合低内聚 数据结构:线性结构,顺序储存 输入/输出设计:根据屏幕提示,从键盘读取数据 2.源程序及注释: #include #include typedef int datatype; #define maxsize 10 typedef struct //创建一个顺序表包含10个整数

串的基本操作

i 串的基本操作 一、 实验目的、意义 (1) 理解串的堆分配存储结构。 (2) 理解用它们表示时插入,生成串,联接串与求子串的算法。 (3) 根据具体问题的需要,能够设计出相关算法。 二、 实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输 入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修 改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: 定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串 三、实验所涉及的知识点 C 语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接 串与求子串的算法。 四、实验结果及分析 (所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图 方式给出。) F 'E=?JK^?t?iS^?Deb ug?T extl .e κe 1 n 呂扇: c-?S 》爭t -託联接串0产主的串片为:GOd bιje!God luck? :GOd bj/ef &串空否? ?<1: X 肌否) GDd Inch? ?s70 ≡ OO ??串t 相同的子串用串討弋普后.串晚: GQqd by^tGood Iucl

顺序表的基本操作 (2)

顺序表的基本操作 /*sqList.h 文件*/ #define LIST_INIT_SIZE 50 /*初始分配的顺序表长度*/ #define INCREM 10 /*溢出时,顺序表长度的增量*/ #define OVERFLOW 1 #define OK 0 #define ERROR -1 typedef int ElemType; /*定义表元素的类型*/ typedef struct SqList{ ElemType *elem; /*存储空间的基地址*/ int length; /*顺序表的当前长度*/ int listsize; /*当前分配的存储空间*/ }SqList; /*sqListOp.h 文件*/ #include "Sqlist.h" int InitList_sq(SqList &L); //顺序表创建函数定义 void FreeList_sq(SqList &L); //顺序表销毁函数定义 int ListInsert_sq(SqList &L, int i, ElemType e); //在顺序表的位置i插入元素e void PrintList_sq(SqList &L); //遍历并输出顺序表所有元素 int ListDelete_sq(SqList &L, int i,ElemType &e); //删除顺序表第i个元素的 bool ListEmpty(SqList &L); //判断顺序表是否为空 int LocateElem_sq(SqList L,ElemType e); //在顺序表里查找出第1个与e相等的数据元素位置//已知线性表La和Lb的元素按值非递减排列 //归并后的La和Lb得到新的顺序线性表Lc,Lc的元素也是按值非递减排列 void MergeList_sq(SqList La,SqList Lb, SqList &Lc); /*sqListOp.cpp文件*/ #include #include #include #include "sqlistOp.h" //创建顺序表 int InitList_sq(SqList &L) { L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); /*初始化失败,返回0*/ L.length = 0; /*置空表长度为0*/ L.listsize = LIST_INIT_SIZE; /*置初始空间容量*/ return OK; /*初始化成功,返回1*/

数据结构串基本操作代码

实验三串 //串的基本操作 #include "stdio.h" #include "stdlib.h" #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; void strlength(SString S)//求字串并放到 S[0] 中 { int m; for(m=1;S[m]!='\0';m++); S[0]=m-1; } void insert(SString S,int n,char a)//是插入的位置 a 是插入的字符{ strlength(S); int i; for(i=S[0];i>=n;i--) S[i+1]=S[i]; S[n]=a; S[S[0]+2]='\0'; } int compare(SString S,SString T) { strlength(S); strlength(T); int i; for(i=1;i<=S[0]&&i<=T[0];i++) { if(S[i]>T[i]) return 1; if(S[i]T[0]) return 1;

else if(S[0]S[0]||len<0||len>S[0]-pos+1) { printf("Error!position or length is out of range\n"); return 0; } for(i=1;i<=len;i++)

顺序表基本操作的实现

1、顺序表基本操作的实现 [问题描述] 在顺序表中查找值为x的元素的位置,在线性表的某个位置插入一个元素,删除线性表某个位置的元素。 [基本要求] 要求建立生成顺序表,可以键盘上读取元素,用顺序存储结构实现存储。 [实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。[建议步骤] 1)建立顺序表的存储结构; 2)利用1)的存储结构建立有实际数据的数据表; 3)实现查找操作; 4)实现插入操作; 5)实现删除操作。 6)写出main函数测试上述操作。 实验源码: #include #define MAX 300 typedef int ElemType; typedef struct { ElemType data[MAX]; int length; }SqList; SqList L; //打印菜单 void menu() { printf("**************************************\n"); printf(" 顺序表操作的验证实验\n"); printf("**************************************\n"); printf(" 1、初始化表\n"); printf(" 2、创建表\n"); printf(" 3、按值查询\n"); printf(" 4、在指定位置插入一个元素\n"); printf(" 5、删除指定位置上的一个元素\n"); printf(" 6、输出表\n"); printf(" 0、退出\n"); printf("***************************************\n"); } //初始化表,置表长为0 void Init(SqList *L)

实验四 串及其应用

实验4:串及其应用 一、实验目的 掌握串类型的实现方法和文本模式匹配方法,熟悉一般文字处理软件的设计方法。二、问题描述 全屏幕文本编辑器通过终端对文本文件进行创建、插入、删除、修改、存储等操作。用户可完成对文本的插入、删除、修改等功能。 三、实验要求 1、对光标实现如下操作:上、下、左、右移动一个字符位置;向前、后翻页;光标移 至文件首、尾;光标移至本行首、尾。 2、实现基本编辑命令: I----在当前光标前插入内容,按ESC结束 F----在当前光标后插入内容,按ESC结束 D----删除光标所在行 ND---删除光标位置开始的n行 N-----删除光标上的字符 W----将修改后的文本保存下来 Q----退出编辑状态。 四、实验环境 PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境或Visual C++ 程序集成环境 五、实验步骤 1、在内存开辟可容纳80行大小的编辑工作区和buffer 的修改缓冲区。 2、要求用户输入编辑文件名,对读入的文件建立相应的页表和行表,在文本编辑程序 中设立页指针、行指针、字符指针,分别指示当前操作的页、行、字符。 3、执行插入、删除、修改操作时,将本次操作内容放到缓冲区; 4、操作确定后,将修改后的文本存到文件中。 六、测试数据 自行设定。 七、算法设计 串的基本操作: 一、串赋值:

Status StrAssign(HString &T,char *chars) { // 生成一个其值等于串常量chars的串T int i,j; if(T.ch) free(T.ch); // 释放T原有空间 i=strlen(chars); // 求chars的长度i if(!i) { // chars的长度为0 T.ch=NULL; T.length=0; } else { // chars的长度不为0 T.ch=(char*)malloc(i*sizeof(char)); // 分配串空间 if(!T.ch) // 分配串空间失败 exit(OVERFLOW); for(j=0;j #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 struct HString { char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL int length; // 串长度 }; /***************文本编辑器的程序 **********************/ #define MAX_LEN 50 // 文件最大行数 #define LINE_LEN 80 // 每行字符数最大值+1 #define NAME_LEN 20 // 文件名最大长度(包括盘符、路径)+1 Status StrAssign(HString &T,char *chars) { // 生成一个其值等于串常量chars的串

顺序串的基本操作实验报告

宁波工程学院电信学院计算机教研室 实验报告 课程名称:数据结构实验项目:顺序串的基本操作 实验人员:徐浩学号: 10401010209 班级:计科102 指导教师:宋宏图 实验位置:计算机中心二楼实验日期: 2011-10-13 一、实验目的 1)熟悉串的定义和串的基本操作。 2)掌握顺序串的基本运算。 3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。 二、实验环境 装有Visual C++6.0的计算机。 本次实验共计2学时。 三、实验内容 编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序。具体如下: 编写栈的基本操作函数 顺序串类型定义如下所示: typedef struct { char ch[MAXSIZE]; int len; } SeqString; (1)串赋值Assign(s,t) ?将一个字符串常量赋给串s,即生成一个其值等于t的串s (2)串复制StrCopy(s,t) ?将串t赋给串s (3)计算串长度StrLength(s) ?返回串s中字符个数 (4)判断串相等StrEqual(s,t) ?若两个串s与t相等则返回1;否则返回0。 (5)串连接Concat(s,t) ?返回由两个串s和t连接在一起形成的新串。 (6)求子串SubStr(s,i,j)

?返回串s中从第i(1≤i≤StrLength(s))个字符开始的、由连续j个字符组成的子串。 (7)插入InsStr (s,i,t) ?将串t插入到串s的第i(1≤i≤StrLength(s)+1)个字符中,即将t的第一个字符作 为s的第i个字符,并返回产生的新串 (8)串删除DelStr (s,i,j) ?从串s中删去从第i(1≤i≤StrLength(s))个字符开始的长度为j的子串,并返回产 生的新串。 (9)串替换RepStr (s,s1,s2) ?在串s中,将所有出现的子串s1均替换成s2。 (10)输出串DispStr(s) ?输出串s的所有元素值 (11)判断串是否为空IsEmpty(s) 编写主函数 调用上述函数实现下列操作: (1)建立串s=“abcdefghijklmn”,串s1=“xyz”,串t=“hijk” (2)复制串t到t1,并输出t1的长度 (3)在串s的第9个字符位置插入串s1而产生串s2,并输出s2 (4)删除s第2个字符开始的5个字符而产生串s3,并输出s3 (5)将串s第2个字符开始的3个字符替换成串s1而产生串s4,并输出s4 (6)提取串s的第8个字符开始的4个字符而产生串s5,并输出s5 (7)将串s1和串t连接起来而产生串s6,并输出s6 (8)比较串s1和s5是否相等,输出结果 程序: #include #define MAXSIZE 100 typedef struct { char ch[MAXSIZE]; int len; } SqString; void StrAssign(SqString &s,char t[]){//串赋值 int i; for(i=0;t[i]!='\0';i++) s.ch[i]=t[i]; s.len=i; } void StrCopy(SqString &s,SqString t){//串复制 int i;

顺序表的基本操作实验报告

湖南第一师范学院信息科学与工程系实验报告 课程名称:数据结构与算法成绩评定: 实验项目名称:顺序表的基本操作指导教师:王杰文 学生姓名:沈丽桃学号:10403080118 专业班级:教育技术 实验项目类型:验证性实验地点:科B305 实验时间: 2011年 10月8 日一、实验目的与要求: 实验目的:实现顺序表的创建、查找、插入、删除与输出 基本原理:顺序表的基本操作 二、实验环境:(硬件环境、软件环境) 1.硬件环境:奔ⅣPC。 2.软件环境:Windows XP 操作系统,TC2.0或VC++。 三、实验内容:(原理、操作步骤、程序代码等) #include # define maxlength 100 /#后不应该有空格/ struct LIST { int elements[maxlength]; int last; }L; typedef int position; void main() { position p,p1; /p和x最好赋值/ int x,x1,i,choice; position Locate(int x,struct LIST*y); void Insert(int x,position p,struct LIST*y); void Delete(position p,struct LIST *y); printf("option:Locate 1,Insert 2,Delete 3\n"); printf("please choice:"); scanf("%d",&choice); switch(choice) { case 1: { printf("please input a number:"); scanf("%d",&x); p1=Locate(x,&L); if(p1==101) printf(“the number does not exist”);

实验三串基本操作的编程实现

实验三串基本操作的编程实现 【实验目的】 容:串基本操作的编程实现 要求: 串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或结构、索引结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。 【实验性质】 验证性实验(学时数:2H) 【实验容】 字符串用常规的顺序存储法来存储,实现常用的功能。 自己编程模式:开发一个程序,用来统计文件中各种信息,如字符个数,行数等。 修改程序模式:将下面程序空白的地方填空。 程序检查模式:将本文件夹中的程序运行后总结相关功能。 【思考问题】 1.字符串的顺序存储和链表存储的差异?C语言中是如何实现字符串的? 2.在字符串处理方面主要有什么操作? 3.字符串的操作的主要特点是什么? 4.举出几个字符串的应用例? 【参考代码】 //功能:顺序串的基本基本功能 #include #include #include #include #define maxsize 30//顺序串的总空间大小 enum returninfo{success,fail,overflow,underflow,range_error,empty};//定义返回信息清单 class string { public: string();//构造函数 ~string();//析构函数 returninfo strcreate(); //创建串 returninfo strinsert(int position,char newstr[],int str_length); //插入 returninfo strdelete(int beginposition,int endposition); //删除 returninfo strmodify(int beginposition,int endposition,char newstr[]); //修改 int strsearch(char newstr[]); //查找

数据结构C语言串的基本操作

串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int length; }Hstr; void main() { Hstr *l,*p,*r; char c,w; int h,j,k; int i=0; l=(Hstr *)malloc(sizeof(Hstr)); p=(Hstr *)malloc(sizeof(Hstr)); r=(Hstr *)malloc(sizeof(Hstr)); l->length=0; p->length=0; r->length=0; printf("请选择相关操作(数字1~5控制,输入0结束)\n"); printf("--------------1.建立串---------------\n"); printf("--------------2.显示串长度-----------\n"); printf("--------------3.生成与原来相同的串---\n"); printf("--------------4.串比较---------------\n"); printf("--------------5.串连接---------------\n"); printf("--------------6.返回值---------------\n"); scanf("%c",&w); getchar(); while(w) { switch(w) { case '1':{printf("请输入字符(#结束):\n"); scanf("%c",&c); while(c!='#') { l->length++; l->ch[i]=c; i++; scanf("%c",&c);

数据结构实验一_顺序表的基本操作实验报告

实验一顺序表的基本操作 一、实验目的 掌握线性表的顺序表基本操作:建立、插入、删除、查找、合并、打印等运算。 二、实验要求包含有头文件和main函数; 1.格式正确,语句采用缩进格式; 2.设计子函数实现题目要求的功能; 3.编译、连接通过,熟练使用命令键; 4.运行结果正确,输入输出有提示,格式美观。 三、实验设备、材料和工具 1.奔腾2计算机或以上机型 2.turboc2,win-tc 四、实验内容和步骤 1. 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2. 往该顺序表中第i位置插入一个值为x的数据元素。 3. 从该顺序表中第j位置删除一个数据元素,由y返回。 4. 从该顺序表中查找一个值为e的数据元素,若找到则返回该数据元素的位置,否则返回“没有找到”。 五、程序 #include #include #define list_init_size 10 #define increment 2

typedef struct { int *elem; int length,listsize; }sqlist; //类型定义 void initlist_sq(sqlist &L) //初始化顺序表 { } void output(sqlist L) //输出顺序表 { } void insertlist(sqlist &L,int i, int x) //顺序表中插入x { } void deletelist(sqlist &L,int j, int y) //顺序表中删除y { } int locateelem(sqlist &L,int e) //顺序表中查找e { } void main() { } 【运行结果】 void initlist_sq(sqlist &L) //初始化顺序表 { L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L.elem) exit (OVERFLOW);

相关主题
文本预览
相关文档 最新文档