串的模式匹配
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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< getchar();getchar(); } 五、实验测试及结果 六、总结与体会 理解了模式匹配基本方法,但kmp比较复杂,任然需要时间去学习