废话不多说,如有错误感谢指正
//对递增有序表插入一个值后仍然保持有序
int findelem(sq L,int x)//第一步找到插入位置
{
int i;
for(i=0;i<=L.length;i++)
{
if(x<L.data[i])
{
return i;
}
}
return i;
}
void insertsq(sq &L,int x)//第二步调用函数,执行插入操作
{
int i,p;
p=findelem(L,x)
for(i=L.length-1;i>=p;i--)
{
L.data[i+1]=L.data[i]
}
L.data[i]=x
++L.length
}
//将两个递增有序链表合并成一个非递减有序的链表(归并算法)
void merge(L *A,L *B,L *C)
{
L *p=A->next//工作指针p,指向最小的
L *q=B->next//工作指针q,指向最小的
L *r//工作指针r,r指针指向C终端结点
C=A
r=C
while(p!=NULL&&q!=NULL)//归并算法的核心语句
{
if(p->data>=q->data)
{
r->next=q
r=r->next
q=q->next
}
else
{
r->next=p
r=r->next
p=p->next
}
}
if(q!=NULL) r->next=q
if(p!=NULL) r->next=p
}
//判断表达式中的括号是否配对(栈的核心思想)
int match(int exp[],int n)
{
char st[maxsize]
int top=-1
for(i=0;i<=n;i++)//配对的核心语句,可以举一反三
{
if(exp[i]=='(')//遇到左括号就入栈
st[++top]=exp[i]
if(exp[i]==')'&&top==-1)//遇到右括号且栈空,说明有额外的右括号,失配
return 0
if(exp[i]==')'&&top!=-1)//遇到右括号且栈不为空,则出栈,栈指针回退
top--
}
if(top!=-1)
return 0
else
return 1
}
//KMP算法
void getnext(Str substr,int next[])//得到next数组
{
int i=1
j=0
next[1]=0
while(i<substr.length)
{
if(j==0||substr.ch[i]==substr.ch[j])
{
++i;
++j;
next[i]=j;
}
else
j=next[j];
}
}
int KMP(Str str,Str substr,int next[])//执行kmp算法
{
int i=1;j=1
while(i<=str.length &a