資料結構例程——串的模式匹配(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)順序表是一邊