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

串的基本操作的编程实现

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

串的基本操作的编程实

Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

数据结构双语班

DATA STRUCTURE BILINGUAL-TEACHING CLASS 实验报告003 批改单

Experiment Report Commendatory Bill

串基本操作的编程实现

2006-2007(2)学期 T523-1班学号:33 姓名:王娟

指导老师:马春江时间:【实验目的】

内容:串基本操作的编程实现

要求:

串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、

删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操

作,存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实

现,用菜单进行管理。也鼓励学生利用基本操作进行一些应用的程序设计。

【实验性质】

验证性实验(学时数:2H)

【实验内容】

可以只完成基本的功能演示程序。也可以通过一个较为实用的系统下体现

各种操作的作用,如可以开发一个文本统计程序,要求如下:

编写程序,进行字符串统计系统的设计

将存在txt文件中的文本进行统计:字母数、标点符号数、单词数、句子

数、段落数。

进一步的工作

(统计:汉字数、每个单词的次数和所在行数等)

【详细设计】

#include <>

#include <>

#include <>

#define Maxlen 50

#include

using namespace std;

typedef struct

{

char ch[Maxlen];

int len;

}strtype;

void disp(strtype *s) 出程序。(按其他键继续) ┃",

"┃

┃",

"┃

┃",

"┃

┃",

"┃OO════∩════OO指导

老师:马春江┃",

"┃湖北汽车工业学院

作者:王娟┃",

"┃▁╭▅▆▇□□█▇▆▅▄▃▂▁(╳)█╮

┃",

"┃╰═▃_电气工程系∠════▔▔▔

┃",

"┃*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*``*:-

.,,.-:*,, ┃",

"┃╭╧╮╭╧╮╭╧╮╭╧╮╭╧╮ *:-.,,.-

:*,、☆*:-., ┃",

"┃║双║║语║║班║║天║║地║★*:-., ┃",

"┃└﹏┘└﹏┘└﹏┘└﹏┘└﹏┘

┃",

"┗━━━━━━━━━━━━━━━━━━━━

━━━━━━━━┛"

};

int i,j;

for(i=20;i>=0;i--)

{

system("cls");

for(j=i;j<=25;j++)

{

cout<<"\t"<

}

Sleep(150);

}

}

void menu2()

{

char *p[]={"┏━━┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳┳┯┳

┳┯┳━━┓",

"┃ ^_^┠数┨┠据┨┠结┨┠构┨┠程┨┠序┨

┠设┨┠计┨^_^ ┃",

"┃┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛

┗┷┛┗┷┛┃",

"┣━━━━━━━━字符串的基本操作实现━

━━━━━━━━┫",

"┃程序功能: ┃",

"┃

┃",

"┃本程序实现字符串的基本操作

┃",

"┃

┃",

"┃ 0.退出程序。(按其他键继续) ┃",

"┃ 1.清屏

┃",

"┃ 2.求串的长度

┃",

"┃ 3.串的复制

┃",

"┃ 4.求子串

┃",

"┃ 5.连接两个串

┃",

"┃ 6.串的插入操作

┃",

"┃ 7.串的等长替换

┃",

"┃ 8.串的删除操作

┃",

"┃ 9.输出一个串

┃",

"┃

┃",

"┃

┃",

"┃OO════∩════OO指导

老师:马春江┃",

"┃湖北汽车工业学院

作者:王娟┃",

"┃▁╭▅▆▇□□█▇▆▅▄▃▂▁(╳)█╮

┃",

"┃╰═▃_电气工程系∠════▔▔▔

┃",

"┃*:-.,,.-:*``*:-.,,.-:*``*:-.,,.-:*``*:-

.,,.-:*,, ┃",

"┃╭╧╮╭╧╮╭╧╮╭╧╮╭╧╮ *:-.,,.-

:*,、☆*:-., ┃",

"┃║双║║语║║班║║天║║地║★*:-., ┃",

"┃└﹏┘└﹏┘└﹏┘└﹏┘└﹏┘

┃",

"┗━━━━━━━━━━━━━━━━━━━━

━━━━━━━━┛"

};

int i;

system("cls");

for(i=0;i<=28;i++)

{

cout<<"\t"<

}

}

//////////////////////////////////////////////////////////////////// /////////////

///////////////////////////main///////////////////////////////////// /////////////

void main()

{

menu();

strtype t1,t2;

strtype *s1=&t1,*s2=&t2;

char ch,str1[Maxlen]=" ",str2[Maxlen]=" ";

int i,j=0,k=0,n,pos;

cin>>ch;

if(ch=='0') exit(0);

menu2();

char *str01=str1, *str02=str2;

cout<<"字符串的赋初值"<

create(s1);

disp(s1);

cout<

for(;;)

{

cout<

cin>>ch;

switch(ch)

{

case '0':

exit(0);

case '1':

system("cls");menu2();

break;

case '2':

cout<<"求串的长度"<

break;

case '3':

cout<<"串的复制"<

copy(s1,s2);

disp(s2);

cout<<"复制成功!"<

break;

case '4':

cout<<"求子串"<

cout<<"输入位置"<

cin>>pos;

cout<<"输入长度"<

cin>>n;

subs(s1,pos,n);

break;

case '5':

cout<<"两个串的连接"<

create(s2);

disp(s1);

disp(s2);

concat(s1,s2);

break;

case '6':

cout<<"串的插入操作"<

cout<<"输入插入位置:";

cin>>i;

create(s2);

ins(s1,s2,i);

disp(s1);

break;

case '7':

cout<<"串的等长替换"<

cout<<"输入替换位置:";

cin>>i;

cout<<"输入长度:";

cin>>j;

create(s2);

replace(s1,s2,i,j);

break;

case '8':

cout<<"串的删除操作"<

cout<<"输入删除子串起始位置:";

cin>>pos;

cout<<"输入删除子串的长度:";

cin>>n;

del(s1,pos,n);

disp(s1);

break;

case '9':

cout<<"输出一个串"<

disp(s1);

break;

default:

cout<<"输入无效菜单命令"<

}

}

}

【用户手册】

【心得体会】

本次实验,通过上机对串的基本操作有了更深刻的了解。关键是本次实验完全是自己所编。在编程过程中,会有很多错误,但都通过翻阅书籍或看范例,得以一一改正,获益不小。这也更加增强了我学好数据结构的信心。相信以后会编出更好的程序。

对串的逻辑结构、存储结构和基本操作的算法设计都有了一定的掌握,了解到串在高级语言中可以广泛应用,如在学号、职工编号、设备编号等,它们不应该是整数处理而应该是字符串处理,都要用到字符串的基本操作。

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)

队列的基本操作代码

队列的基本操作代码: #include #include #define MAXQSIZE 100 #define OVERFLOW 0 #define ERROR 0 #define OK 1 typedef int QElemType; typedef int Status; typedef struct { QElemType *base; int front; int rear; int tag; }SqQueue; Status InitQueue(SqQueue &Q) { Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType)); if(!Q.base) exit(OVERFLOW);//存储分配失败 Q.front=Q.rear=0; tag=0; return OK; } int QueueLength(SqQueue Q) { return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;//返回Q的元素个数,即队列的长度} Status EnQueue(SqQueue &Q,QElemType e) { if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;//队列满 Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; } Status DeQueue(SqQueue &Q,QElemType &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front];

数据结构《第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);

队列的基本操作及其应用

广西工学院计算机学院 《数据结构》课程实验报告书实验四队列的基本操作及其应用 学生姓名:李四 学号:2012 班级:计Y124 指导老师:王日凤 专业:计算机学院软件学院 提交日期:2013年6月20日

1.实验目的 1)通过对队列特点的分析,掌握队列的存储结构及其基本操作,学会定义队列的顺序存储结构和链式存储结构,在实际问题中灵活运用。 2)掌握队列先进先出的特点,掌握队列的基本操作,如出队列、入队列、判队列空、判队列满等,熟悉各种操作的实现方法。 3)通过具体的应用实例,进一步熟悉和掌握队列的实际应用。 2.实验内容 (1)建立一个含n个数据的队列,实现队列的基本操作。包括: ?//1. 初始化,构造一个空队列 void initQueue(Queue &Q) ?//2. 判断队列空, 空则返回true bool QueueEmpty(seqQueue &Q) ?//3. 判断队列满, 满则返回true bool QueueFull(seqQueue &Q) ?//4. 取队头元素, 用x返回队头元素,返回true;空队列则返回false Bool QueueHead(seqQueue &Q, elementType &x) ?//5. 入队列,在队尾插入新元素x (流程图) bool pushQueue (seqQueue &Q, elementType x) ?//6. 出队列,用x带回队头元素,并在队头删除,返回true,队列空则返回false(流程图)bool popQueue (seqQueue &Q, elementType &x) ?//7. 输出队列,从队头到队尾依次输出 void printQueue(seqQueue Q) (2)队列应用:利用队列操作打印杨辉三角形的前n行(如n=7)。 3.实验要求 (1)上机前交实验源程序(纸质版),由学习委员统一收好交老师(附上不交同学名单)。 (2)用一切你能想到的办法解决遇到的问题,培养解决问题的能力。 (3)实验课上进行答辩。 (4)实验报告当场交。报告内容包括:实验目的、实验内容、实验代码、实验输入输出结果以及实验体会供五部分。

试验 --循环队列的基本操作及应用

数据结构实验报告 ----试验三循环队列的基本操作及应用 一、问题描述: 熟悉并掌握循环队列的相关操作,自己设计程序,实现循环队列的构造、清空、销毁及队列元素的插入和删除等相关操作。 二、数据结构设计: #define MAXQSIZE 10 //最大队列长度 struct SqQueue { QElemType *base; //初始化动态分配存储空间 Int front; // 头指针,若队列不空,只想对列头元素 int rear; //尾指针,若队列不空,指向队列尾元素的 //下一个位置 }; 三、功能设计: 程序中所涉及到的函数如下: Status InitQueue(SqQueue &Q) //构造一个空队列Q Status DestroyQueue(SqQueue &Q) //销毁队列Q,Q不再存在 Status ClearQueue(SqQueue &Q) //将Q清为空队列 Status QueueEmpty(SqQueue Q) //若队列Q为空队列,则 //返回TRUE,否则返回FALSE int QueueLength(SqQueue Q) //返回Q的元素个数,即队列长度Status GetHead(SqQueue Q,QElemType &e)//若队列不空,则用e返回Q的对 //头元素,并返回OK,否则返回ERROR Status EnQueue(SqQueue &Q,QElemType e)//插入元素e为Q的新的队尾元素Status DeQueue(SqQueue &Q,QElemType &e)//若队列不空,则删除Q的队头 //元素,用e返回其值,并返回 //OK,否则返回ERROR Status QueueTraverse(SqQueue Q,void(*vi)(QElemType))//从队头到队尾依次 //对队列Q中每个元素调用函数 //vi()。一旦vi失败,则操作失败四、源程序: // c1.h (程序名) #include #include #include // malloc()等 #include // INT_MAX等 #include // EOF(=^Z或F6),NULL

(完整版)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、查找重复值 选取数据区域 - 开始 - 条件格式 - 突出显示单元格规则 - 重复值。 显示效果:

栈和队列的基本操作实现及其应用

实验二栈和队列的基本操作实现及其应用 一_一、实验目的 1、熟练掌握栈和队列的基本操作在两种存储结构上的实现。 一_二、实验内容 题目一、试写一个算法,判断依次读入的一个以@为结束符的字符序列,是否为回文。所谓“回文“是指正向读和反向读都一样的一字符串,如“321123”或“ableelba”。 相关常量及结构定义: #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int SElemType; typedef struct SqStack { SElemType *base; SElemType *top; int stacksize; }SqStack; 设计相关函数声明: 判断函数:int IsReverse() 栈:int InitStack(SqStack &S )

int Push(SqStack &S, SElemType e ) int Pop(SqStack &S,SElemType &e) int StackEmpty(s) 一_三、数据结构与核心算法的设计描述 1、初始化栈 /* 函数功能:对栈进行初始化。参数:栈(SqStack S)。 成功初始化返回0,否则返回-1 */ int InitStack(SqStack &S) { S.base=(SElemType *)malloc(10*sizeof(SElemType)); if(!S.base) //判断有无申请到空间 return -1; //没有申请到内存,参数失败返回-1 S.top=S.base; S.stacksize=STACK_INIT_SIZE; S.base=new SElemType; return 0; } 2、判断栈是否是空 /*函数功能:判断栈是否为空。参数; 栈(SqStack S)。栈为空时返回-1,不为空返回0*/ int StackEmpty(SqStack S) { if(S.top==S.base) return -1; else return 0; } 3、入栈 /*函数功能:向栈中插入元素。参数; 栈(SqStack S),元素(SElemtype e)。成功插入返回0,否则返回-1 */ int Push(SqStack &S,SElemType e) { if(S.top-S.base>=S.stacksize) { S.base=(SElemType *)realloc(S.base,(S.stacksize+1) * sizeof(SElemType));

实验三 串基本操作的实现

实验三串基本操作的实现 专业:计算机科学与技术班级: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

数据结构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、扩充编辑操作,如对某行进行串替换?

数据结构 栈和队列的基本操作实现及其应用

实验二栈和队列的基本操作实现及其应用 一、实验目的 1、熟练掌握栈和队列的基本操作在两种存储结构上的实现。 2、会用栈和队列解决简单的实际问题。 二、实验内容(可任选或全做) 题目一、试写一个算法,判断依次读入的一个以@为结束符的字符序列, 是否为回文。所谓“回文“是指正向读和反向读都一样的一字符串,如“321123”或“ableelba”。 相关常量及结构定义: # define STACK_INIT_SIZE 100 # define STACKINCREMENT 10 # define OK 1 # define ERROR 0 typedef int SElemType; //栈类型定义 typedef struct SqStack { SElemType *base; SElemType *top; int stacksize; }SqStack; 设计相关函数声明: 判断函数:int IsReverse() 栈:int InitStack(SqStack &S ) int Push(SqStack &S, SElemType e ) int Pop(SqStack &S,SElemType &e) int StackEmpty(s) 题目二、编程模拟队列的管理,主要包括: 出队列、 入队、 统计队列的长度、 查找队列某个元素e、 及输出队列中元素。 [实现提示]:参考教材循环队列的有关算法,其中后两个算法参考顺序表的实现。 题目三、Rails

Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, it turned out that the station could be only a dead-end one (see picture) and due to lack of available space it could have only one track. The local tradition is that every train arriving from the direction A continues in the direction B with coaches reorganized in some way. Assume that the train arriving from the direction A has N <= 1000 coaches numbered in increasing order 1, 2, ..., N. The chief for train reorganizations must know whether it is possible to marshal coaches continuing in the direction B so that their order will be a1, a2, ..., aN. Help him and write a program that decides whether it is possible to get the required order of coaches. You can assume that single coaches can be disconnected from the train before they enter the station and that they can move themselves until they are on the track in the direction B. You can also suppose that at any time there can be located as many coaches as necessary in the station. But once a coach has entered the station it cannot return to the track in the direction A and also once it has left the station in the direction B it cannot return back to the station. Input The input consists of blocks of lines. Each block except the last describes one train and possibly more requirements for its reorganization. In the first line of the block there is the integer N described above. In each of the next lines of the block there is a permutation of 1, 2, ..., N. The last line of the block contains just 0. The last block consists of just one line containing 0. Output

串的基本操作

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

数据结构串基本操作代码

实验三串 //串的基本操作 #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++)

顺序队列的基本操作

#include #include #include #include #define QueueSize 50 typedef char QueueData; typedef struct queue { QueueData data[QueueSize]; int rear,front; }SeqQueue; void Menu() { printf("\n"); printf("|…………………………………………|\n"); printf("| 1、建立|\n"); printf("| |\n"); printf("| 2、显示|\n"); printf("| |\n"); printf("| 3、入队|\n"); printf("| |\n"); printf("| 4、出队|\n"); printf("| |\n"); printf("| 5、取队头元素|\n"); printf("| |\n"); printf("| 6、退出|\n"); printf("|…………………………………………|\n"); printf("\n"); printf("请选择菜单项,按回车键完成选择:"); } //模块1 建立 void Set(SeqQueue *&Q) { Q=(SeqQueue*)malloc(sizeof(SeqQueue)); if(Q==NULL) { printf("存储空间分配失败!\n"); exit(1); } else { printf("存储空间分配成功!\n"); } Q->front=Q->rear=-1; //置空队列

实验四 串及其应用

实验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;

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