1.顺序表的查找:
2.单链表的查找:
3.双链表的查找:
4.循环单链表的查找:
5.循环双链表的查找:
int LocateElem(SqList *L, ElemType e) //按元素值查找
{
int i = 0;
while (i < L -> length && L -> data[i] != e)
i++; //遍历查找元素e
if (i >= L ->length) //未找到时返回0
return 0;
else
return i+1; //找到后返回其逻辑序号
}2.单链表的查找:
int LocateElem(LinkList *L, ElemType e) //按元素值查找
{
int i = 1;
LinkList *p = L -> next; //p指向开始节点,i置为1(即开始节点的序号为1)
while (p != NULL && p -> data != e) //查找data值为e的节点,其序号为i
{
p = p -> next;
i++;
}
if (p == NULL) //不存在元素值为e的节点,返回0
return(0);
else //存在元素值为e的节点,返回其逻辑序号i
return(i);
}3.双链表的查找:
int LocateElem(DLinkList *L, ElemType e) //按元素值查找
{
int n = 1;
DLinkList *p=L -> next;
while (p != NULL && p -> data != e)
{
n++;
p = p -> next;
}
if (p == NULL)
return(0);
else
return(n);
}4.循环单链表的查找:
int LocateElem(LinkList *L, ElemType e) //查找元素位置
{
LinkList *p = L -> next;
int n = 1;
while (p != L && p -> data != e)
{
p = p -> next;
n++;
}
if (p == L)
return(0);
else
return(n);
}5.循环双链表的查找:
int LocateElem(DLinkList *L, ElemType e) //按元素值查找
{
int n = 1;
DLinkList *p = L -> next;
while (p != NULL && p -> data != e)
{
n++;
p = p -> next;
}
if (p == NULL)
return(0);
else
return(n);
}6.采用简单匹配算法找出顺序串中元素的位置
//简单匹配算法
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);
//模式匹配不成功
}7.采用KMP算法找出顺序串中元素的位置
int KMPIndex(SqString s, SqString t) //KMP算法
{
int next[MaxSize], i=0, j=0;
GetNext(t,next);
while (i < s.length && j < t.length)
{ if (j == -1 || s.data[i] == t.data[j])
{
i++;
j++; //i,j各增1
}
else j=next[j]; //i不变,j后退
}
if (j >= t.length)
return(i - t.length); //返回匹配模式串的首字符下标
else
return(-1); //返回不匹配标志
}
8.采用修正的KMP算法找出顺序串中元素的位置int KMPIndex1(SqString s, SqString t) //修正的KMP算法
{
int nextval[MaxSize], i = 0, j = 0;
GetNextval(t, nextval);
while (i < s.length && j < t.length)
{ if (j == -1 || s.data[i] == t.data[j])
{
i++;
j++;
}
else
j=nextval[j];
}
if (j >= t.length)
return(i - t.length);
else
return(-1);
}
本文探讨如何使用C++实现两种查找算法:简单匹配算法和KMP算法,以定位顺序串中的元素位置。
1万+

被折叠的 条评论
为什么被折叠?



