串和广义表

定义:串(或空字符串)是由0个或多个字符组成的有限序列。

区分:空串:长度为0.

      空格串:有一个或多个空格组成的串。

串中常用的操作:

1:求串长StrLength(S) 返回S的元素个数,称为串的长度。

例:设S=”A;/DOCUMENT/MARY.DOC”;则strlen(s)=20.

2:串的定位:subString(s);

例:设S=”A;/DOCUMENT/MARY.DOC”;则”/”的字符定位的位置是3.

第五章 数组和广义表

5.1:地址转换:

假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为   288B         ;末尾元素A57的第一个字节地址为  1282      ;若按行存储时,元素A14的第一个字节地址为        1072    ;若按列存储时,元素A47的第一个字节地址为     1276         。

5.2:求下列广义表操作的结果:

(1) GetHead【((a,b),(c,d))】==   (a,b) ;      

(2) GetHead【GetTail【((a,b),(c,d))】】==      (c,d)       ;

(3) GetHead【GetTail【GetHead【((a,b),(c,d))】】】==      b   ;

(4) GetTail【GetHead【GetTail【((a,b),(c,d))】】】==   (d)       ;

时间: 2024-08-07 05:34:39

串和广义表的相关文章

javascript实现数据结构:广义表

原文:javascript实现数据结构:广义表  广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an) LS是广义表的名称,n是它的长度,ai可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表.习惯上,用大写字母表示广义表的名称,小写字母表示原子.当广义表LS非空时,称第一个元素a1为LS的表头,称其余元素组成的表(a2, a3, ..., an)是LS的表尾. 下面列举一些广义表的例

_DataStructure_C_Impl:广义表头尾链表存储

#include<stdio.h> #include<stdlib.h> #include<string.h> #include"SeqString.h" typedef char AtomType; typedef enum{ATOM,LIST} ElemTag;//ATOM=0,表示原子,LIST=1,表示子表 typedef struct Node { ElemTag tag; /*标志位tag用于区分元素是原子还是子表*/ union { A

_DataStructure_C_Impl:广义表的扩展线性链表存储

#include<stdio.h> #include<stdlib.h> #include<string.h> #include"SeqString.h" typedef char AtomType; typedef enum{ATOM,LIST} ElemTag;//ATOM=0,表示原子,LIST=1,表示子表 typedef struct GLNode{ ElemTag tag; //标志位tag用于区分元素是原子还是子表 union{ Ato

广义表的基本操作实现

广义表的四个特征:(1)广义线性表:(2)元素复合性:(3)元素递归性:(4)元素共享性 广义表的上述四个特征对于他的使用价值和应用效果起到了很大的作用.广义表的结构相当灵活,它可以兼容线性表.数组.树和有向图等各种常用的数据结构.当二维数组的每行或每列作为子表处理时,二维数组就是一个广义表:如果限制广义表中元素的共享和递归,广义表和树对应:如果限制广义表的递归并允许数据共享,则广义表和图对应. 广义表的基本操作有:(1)创建一个广义表(我以头尾链表作为存储结构):(2)取表头:(3)取表尾:(

数据结构(C语言版)-第4章 串、数组和广义表

补充:C语言中常用的串运算 调用标准库函数 #include<string.h> 串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char from)串连接,strcat(char to,char from) 求串长,strlen(char s) 4.1  串 串(String)----零个或多个字符组成的有限序列 串的存储结构:顺序存储.链式存储 顺序存储表示 typedef struct{ char *ch; //若串非空,则按串长分配存储区,

第四章_串、数组和广义表_学习小结

串.数组和广义表 广义表被鸽了,暂时就不提它,总结一下串和数组的心得. 串 串本身不难,好比字符数组,都是我们所熟悉的.难得是与其相关的算法,例如KMP算法. 对于KMP算法,难点在于next数组的取得与使用. 点击跳转:基于KMP算法的字符匹配问题 以上是个人的一些见解,当然是参考别人的博客之后的.... 数组 至于数组,这里主要研究二维数组的应用,比如用三元组表压缩存储. 由于书里连ADT都没有,只能自己摸索着定义了....(还不是为了PTA的题目QAQ)所以就稍微详细说一下 例:用三元组表

广义表的实现(法二)

#include<iostream> #include<string> using namespace std; enum elemTag {ATOM,LIST}; class GList; class GLnode { private: elemTag Tag; //标志是原子还是子表 0:原子 1:子表 union { char data; //原子结点值域 struct //表结点指针域 { GLnode *hp; GLnode *tp; }ptr; }; friend cl

数据结构之---C语言实现广义表头尾链表存储表示

//广义表的头尾链表存储表示 //杨鑫 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> #define MAXSTRLEN 40 ) typedef char SString[MAXSTRLEN+1]; typedef char AtomType; // 定义原子类型为字符型 typedef enum{ ATOM, LIST // ATOM==0:原

数据结构算法C语言实现(十九)--- 5.5&amp;5.6&amp;5.7广义表

一.简述 传说Lisp的基本数据结构就是广义表,广义表也是具有典型递归属性的数据结构,此外,由于建表要处理字符串,用C语言处理起来也是一脸懵逼.....最后自己还想写一个将广义表还原成字符串的函数,一是使其可视化,而是验证算法5.6.花了不少功夫才写出来(强烈建议自己动手写一写),最后是借助树形结构的角度才找到一个不错的解决办法.按照<数据结构编程实验>的分类,数据结构无非线性结构.树状结构.图结构,可以说树是特殊的图(图的最小生成树),线性表示特殊的树.....扯远了! 二.头文件 补充版字