1. 程式人生 > >資料結構例程——串的模式匹配(Brute-Force演算法)

資料結構例程——串的模式匹配(Brute-Force演算法)

問題:模式匹配,設有主串s和子串t,在主串s中找到一個與子串t相等的子串。
這裡寫圖片描述

解答:(標頭檔案sqstring.h見順序串演算法庫

#include <stdio.h>
#include "sqString.h"

int index(SqString s,SqString t)
{
    int i=0,j=0;
    while (i<s.length && j<t.length)
    {
        if (s.data[i]==t.data[j])   //繼續匹配下一個字元
        {
            i++;                //主串和子串依次匹配下一個字元
j++; } else //主串、子串指標回溯重新開始下一次匹配 { i=i-j+1; //主串從下一個位置開始匹配 j=0; //子串從頭開始匹配 } } if (j>=t.length) return(i-t.length); //返回匹配的第一個字元的下標 else return(-1); //模式匹配不成功
} int main() { SqString s,t; StrAssign(s,"ababcabcacbab"); StrAssign(t,"abcac"); printf("s:"); DispStr(s); printf("t:"); DispStr(t); printf("位置:%d\n",index(s,t)); return 0; }

相關推薦

資料結構——模式匹配Brute-Force演算法

問題:模式匹配,設有主串s和子串t,在主串s中找到一個與子串t相等的子串。 解答:(標頭檔案sqstring.h見順序串演算法庫) #include <stdio.h> #inc

資料結構模式匹配C語言實現

一、暴力匹配演算法(BF) BF全稱為Brute-Force,最簡單直觀的模式匹配演算法。 1.演算法思想 兩個字串進行匹配時,一個主串和一個模式串,就是按照我們最容易想到的演算法來進行匹配。用兩個變數i,j分別記錄主串和模式串的匹配位置,如果兩者在某個字

資料結構——迷宮問題用棧結構

例:求出從入口到出口的路徑 程式實現: #include <stdio.h> #define MaxSize 100 #define M 8 #define N 8 int mg[M+2][N+2]= { {1,1,1,1,1

資料結構 二叉樹的層次遍歷演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料結構——對稱矩陣的壓縮儲存及基本運算

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料結構——二叉樹的層次遍歷演算法

【二叉樹的層次遍歷演算法】   實現二叉樹的層次遍歷演算法,並對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”建立的二叉樹進行測試。   請利用二叉樹演算法

資料結構——線索化二叉樹(中序)

#include <stdio.h> #include <malloc.h> #define MaxSize 100 typedef char ElemType; typedef struct node { Elem

資料結構——簡單的計數排序

#include <stdio.h> #include <malloc.h> #define MaxSize 20 #define MaxNum 100 typedef

資料結構——二叉樹的構造

1.由先序序列和中序序列構造二叉樹 定理:任何n(n≥0)個不同節點的二叉樹,都可由它的中序序列和先序序列唯一地確定。 證明(數學歸納法) 基礎:當n=0時,二叉樹為空,結論正確。 假設:設

資料結構——從根節點到每個葉子節點的路徑之逆

問題:設計演算法輸出從根節點到每個葉子節點的路徑之逆。 解法1:利用二叉樹後序遍歷非遞迴演算法中,每一個葉子節點出現時,棧中從棧頂到棧底,正好是葉子節點到根節點的逆序的性質編寫。 [參考解答](

資料結構——以孩子兄弟鏈儲存的樹的高度

例: 以孩子-兄弟鏈作為儲存結構,求樹的高度 源程式:【說明——函式TreeCreate僅建立瞭如上圖所示的圖,不具有通用性。】 #include <stdio.h> #incl

資料結構——選擇排序之直接選擇排序

#include <stdio.h> #define MaxSize 20 typedef int KeyType; //定義關鍵字型別 typedef char InfoTy

資料結構——合併有序表

問題:有兩個有序表LA和LB,將它們合併成一個有序表LC。要求不破壞原有表LA和LB 演算法思想: 解法1:用順序表實現(支援的演算法庫,及list.h檔案,請點選連結…) #includ

資料結構——圖的鄰接矩陣儲存結構演算法

#include <stdio.h> #include <malloc.h> #define MAXV 100 /*最大頂點數設為100*/ #define LIMI

資料結構——最小生成樹的普里姆演算法

(程式中graph.h是圖儲存結構的“演算法庫”中的標頭檔案,詳情請單擊連結…) #include <stdio.h> #include <malloc.h> #inc

資料結構—約瑟夫環問題迴圈單鏈表

n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 解題思路:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。迴圈單鏈表:尾指標指向頭結點。這樣指標可以迴圈移動。 可以使用兩個指標來操作,將指標q指向需要操作的結點上,指標p指向需要操作結點的前

資料結構學習筆記------紅黑樹附c++程式碼

1、紅黑樹簡介 紅黑樹是二叉查詢樹的一種,其增刪改查的統計效能要優於AVL樹,查詢、插入、刪除演算法的複雜度都為O(log(n))。先附上紅黑樹這種資料結構的性質: 性質1、節點是紅色或黑色。 性質2、根節點是黑色。 性質3、每個葉節點(是指的空節點,nil節點)是黑色的。 性質4、

資料結構學習筆記------並查集附cf例題

並查集是將原始的資料集S看成一個森林,每棵樹代表一個集合。初始時,每個資料看成一顆只有根節點的樹,根據具體要求,將若干樹合併起來組成若干個含有節點較多的樹,每棵樹就是一個集合。此資料結構可以方便的對資料集S進行:(1)查詢其屬於哪個集合(2)將一個集合合併到另一個集合的操作。要注意的是,

1.3 Vrep之BubbleRob擴充套件循跡移動

文章目錄 建立視覺感測器 設定路徑 繫結指令碼 擴充套件例程1.1的BubbleRob使得小車能沿設定路線移動,最終效果圖 建立視覺感測器 首先建立要放在BubbleRob上的三個視覺感測器,即 [Menu

資料結構學習筆記Day2-單鏈表用java實現

一、首先說一下線性表 1. 什麼是線性表,線性表的邏輯特性? 1)有一個頭(表頭),有一個尾(表尾) 2)表頭與表尾之間的元素有且只有一個前驅元素,有且只有一個後繼元素 2.線性表有兩種儲存方式? 順序表和連結串列 3.順序表和連結串列的區別? 1)順序表是一邊