每日算法_4月12日_03

1. 串的重要知识点

(1)串的三种存储结构

  1. 顺序存储
    eg:String str[100];
    需要注意的是:下标为0的存储单元处存储串的长度
  2. 堆存储结构
    堆存储方式通常有一个头结点
 typedef struct {    //自定义一种等同于structXXX的数据类型String
	node *head;
	int  length;
}String;
String str;
str.head=(node*)molloc(sizeof(node));
  1. 块链式存储
    块内部使用顺序存储结构,而块之间使用链式存储结构
   typedef struct{
            Node *head,*tail;
            int length; 
   }String_block;
   typedef struct{
            Node *next;
            char c[30]; 
   }Node;

(2)串的朴素匹配算法

子串定位又称串的模式匹配,是串的应用中最重要的运算之一。
匹配算法的思想:在目标串S中查找模式为T的子串的位置
匹配算法的过程:从两个串的第一个字符处依次比较,如果对应元素相同,则继续比较两个串的下一个字符,反之则目标串S的下标后移,再与模式串比较,直至找到。

(3) 串的常用方法

StrAssign(t,chars)
初始条件:chars是一个字符串常量
操作结果:生成一个值为chars的串t.

StrConcat(s,t)
初始条件:串s,t已存在
操作结果:将串t连接到串s的后面形成新串存放在s中

Strlength(t)
初始条件:字符串t已存在
操作结果:返回串t中的元素个数,称为串长

SubString(s,pos,len,sub)
初始条件:串s已存在,1<=pos<=Strlength(s),且0<=len<=Strlength(s)-pos+1
操作结果:用sub来返回串s的第pos个字符起长度为len的子串

串的匹配算法

(1)需求

判断字符串是否为回文字符串,若是,返回1,否则返回0

(2)思路分析

  1. 首先理解回文的概念,即正反读一样,所以我们就要解决如何将字符串逆置,从而考虑有先进后出特点的栈;
  2. 将字符串依次入栈;
  3. 依次出栈并与字符串对应下标元素比较,若存在不相等的元素,则不是回文字符串。

(3)代码实现

int IsHuiwen( char *t)
{//判断t字符是否为回文,若是,返回1,否则返回0   
 SeqStack s;
 int  i , len;  
 char temp;  
 len=strlen(t); //求字符串长度  
 for ( i=0; i<len; i++)//将所有字符入栈 
   Push( &s, t[i]);//&s:取变量s的地址 
 for ( j=0; j<len; j++)   
 {// 每弹出一个字符与相应字符比较   
    temp=Pop (&s);   
    if( temp!=t[j]) 
      return 0 ;// 不等则返回0   
 }  
 return 1 ; // 比较完毕均相等则返回 1
}

(4) 需要注意的点

  1. 用strlen(ElemType *E)来获取字符串的长度,用sizeof(ElemType *E)来获取内存空间长度;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值