C语言版数据结构讲解:串的概念与操作

版权申诉
0 下载量 70 浏览量 更新于2024-07-03 收藏 611KB PPT 举报
"数据结构-C语言版:DS04-串.ppt" 本文将深入探讨数据结构中的一个重要概念——串,以及其在C语言环境下的实现。串,即字符串的简称,是由零个或多个字符组成的有限序列。在C语言中,串通常以字符数组的形式存在,可以用来表示文本信息。 串的定义包括以下几个要点: 1. 串是由零个或多个字符组成的序列,例如S="a1a2……an",其中S是串名,"a1a2……an"是串的值,每个ai是字符,n是串的长度。 2. 空串是长度为0的串,不包含任何字符,用NullString表示。 3. 空格串是由一个或多个空格字符组成的串,如" ",其长度等于空格字符的数量,用BlankString表示。 4. 子串是从主串中提取出的连续字符序列,例如在串A=“ChinaBeijing”中,“Beijing”是A的一个子串,子串的位置以第一个字符在主串中的位置表示。 串的基本操作主要包括: 1. 长度计算:确定串中字符的总数。 2. 拼接:连接两个或多个串形成新的串,如S1 + S2。 3. 插入:在串的特定位置插入一个字符或子串。 4. 删除:从串中移除指定位置的字符或子串。 5. 查找:在串中寻找指定子串的出现位置。 6. 替换:替换串中某个位置的字符或子串。 7. 比较:根据字符的ASCII码比较两个串的大小或相等性。 串的存储结构主要有两种常见方式: 1. 顺序存储:使用一维字符数组来存储串,便于访问和处理,但空间利用率可能不高。 2. 链式存储:通过链表结构来存储串,每个节点包含一个字符和指向下一个字符的指针,适合动态变化的串操作。 在C语言中,通常使用字符数组来表示串,并通过指针进行操作。例如,可以定义一个字符数组`char str[100]`来存储长度不超过99个字符的串。C语言标准库提供了`<string.h>`头文件,包含了处理字符串的一些函数,如`strlen()`计算串的长度,`strcpy()`复制串,`strcat()`拼接串,`strcmp()`比较串等。 串的模式匹配是计算机科学中的一个重要问题,常用于文本搜索和文本处理。常见的算法有朴素的暴力匹配法和更高效的KMP算法、Boyer-Moore算法等。这些算法能够高效地查找一个模式串在主串中是否存在及其位置。 总结来说,串作为数据结构中的基本元素,在文本处理、字符串操作、模式匹配等方面具有广泛的应用。理解并熟练掌握串的概念、存储结构及基本操作,对于学习和使用C语言处理字符串问题至关重要。
2023-06-10 上传

给出dosbox画圆程序的前半部分代码,为该代码添加注释,在结尾给出简易流程说明 data segment shuc db 'draw a yuan: $' hua1 db 'input yuanxin and banjing(example:310,220 200): $' zifu db 20 dup(0) ;此段用以临时存放输入字符 shu db 20 dup(0) ; suan db 24 dup(0) ;用来存放计算圆过程中产生的临时数据 data ends stack segment stk db 16 dup(0) stack ends code segment assume cs:code, ds:data,ss:stack start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov dx,offset shuc ;显示输入C的提示字符 call showmsg call input ;输入字符c的处理 mov al,ds:[si] and al,11011111b ;便于大小写都识别,将字符转换成大写 cmp al,43h draw1: mov dx,offset hua1 call showmsg call input call zhuanshu call moshi mov bx,offset shu mov ax,ds:[bx] mov si,ax mov ax,ds:[bx+2] mov di,ax mov ax,ds:[bx+4] call drawyuan mov ax,4c00h int 21h ;--------------------------------------- input: ;实现键盘输入字符 mov bx,0 mov cx,20 re: mov ah,1h ;DOS中断 键盘键入回显,al为字符 int 21h cmp al,0dh ;0dh为回车的ASCII码 jz scx mov si,offset zifu mov [bx][si],al ;将输入的字符放到zifu区 inc bx loop re ret ;-------------------------------------- scx: ;条件跳转时对cx设置 mov cx,0 ret ;-------------------------------------- showmsg: ;用来显示提示字符 mov ah,9h int 21h ret ;-------------------------------------- moshi: ;屏幕显示模式 mov al,12h mov ah,0 int 10h ret ;------------------------------------- zhuanshu: ;将输入的ascII码转为数字 mov bx,offset zifu mov bp,offset shu mov cx,16 mov si,0 mov di,0 lei: mov al,ds:[bx][si] cmp al,0 jz scx sub al,30h mov dl,100 mul dl mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+1] sub al,30h mov dl,10 mul dl add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+2] sub al,30h add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax add si,4 add di,2 loop lei ret

2023-05-31 上传