串的模式匹配

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四顺序串的各种模式匹配

一、实验目的

熟悉串的有关概念,掌握串的存储结构及串的模式匹配算法。

二、实验内容

由用户随意输入两个串:主串S和模式串T,设S=‘s1s2…sn’,T=‘t1t2…tm’,且0

1(必做)、用简单模式匹配算法判断模式串T是否在主串S中,若在,则输出模式串在主串的第一匹配位置,否则,匹配失败,返回零值。

2(选做)、用KMP模式匹配算法判断模式串T是否在主串S中,若在,则输出模式串在主串的第一匹配位置,否则,匹配失败,返回零值。

三、算法思想与算法描述

单链表是线性表的链式存储结构的一种形式,它用一组地址任意的存储单元存放线性表的各个元素。

四、实验步骤与算法实现

#include

#include

using namespace std;

typedef struct taglin{

int data;

taglin* next;

}lin;

void initlin(lin* &L,int e){

lin* p=L,* s;

while(p->next!=NULL)

p=p->next;

s=(lin*)malloc(sizeof(lin));

s->data=e;

s->next=p->next;

p->next=s;

}

void main(){

int num,e,x,y,count=-1,c=0,e1,t=-2147483648;

bool mark=false;

lin* L,* tx,* p,* q;

L=(lin*)malloc(sizeof(lin));

L->next=NULL;

cout<<"输入个数>=2"<

cin>>num;

if(num<2){

cout<<"输入比2小的值_错误"<

getchar();

getchar();

}

cout<<"输入"<

for(int i=0;i

cin>>e;

initlin(L,e);

if(c==0){

e1=e;

c++;

}

if(e

cout<<"输入的值比前一个值小_错误"<

getchar();

getchar();

}

t=e;

}

cout<<"输入x y"<

cin>>x>>y;

if(y>=e)

mark=true;

if(e1>x)

x=e1;

tx=L->next;

for(;tx->data<=x;tx=tx->next);

p=L->next;

for(;p!=NULL&&p->next!=tx;p=p->next);

q=p;

if(!mark){

for(;p!=NULL&&p->data<=y;p=p->next)

count++;

p=q;

q=q->next;

for(;count>0;count--){

p->next=q->next;

q=q->next;

}

for(p=L,q=p->next;p->next!=NULL;p=p->next){

if(p->next->data==x)

p->next=q->next;

q=q->next;

}

}

else{

if(e1

p=L;

for(;p->next!=tx&&p->next!=NULL;p=p->next);

p->next=NULL;

}

else

L->next=NULL;

}

cout<<"_____________"<

for(p=L->next;p!=NULL;p=p->next)

cout<data<<" "<

getchar();getchar();

}

五、实验测试及结果

六、总结与体会

理解了模式匹配基本方法,但kmp比较复杂,任然需要时间去学习

相关文档
最新文档