算法分析:回文是指正读和反读均相同的字符序列,例如:“abba”,“abcba”
所用到的结构:单链表,栈
(单链表用于存储字符串,栈用于对单链表中字符串的判定)
算法:1,构造空栈 s
2,将单链表存储的字符串中的前一半字符进栈
3,将栈中的字符逐个与单链表中的后半部分的字符进行比较。如果字符全部相等,则判定字符串是回文;如果有一个字符不相等,则判定字符串不是回文。
4,考虑字符串的构造:1:“abba” 2:“abcba”
Void huiwen(linklist L , int n)
{
Int i ;
Char ch ;
Linklist *p;
Snode *ls;
Initstack (ls);
p=L->nest; //初始化指针
i=1;
while(i<=(n/2) //将单链表中的前半部分进栈
{
ch = p->da
ls->top++;
ls->da
p=p->next; i++;
}
//考虑字符串的构造:1:“abba” 2:“abcba”
if((n%2)= =1)p=p->next; //若n为奇数,则中间位置的字符不用进栈,p指向单链表后半部分的第一个节点
k=1; //设置标志点 可以用0和1来标记:k=1 表示对应字符全部相等,k=0 表示至少有一对字符不相等
while((p!=null)&&(k= =1)) //将栈ls中的字符逐个与单链表后半部分的字符进行比较
{
ch=ls-> da
if(p->da
p=p->next;
else
k=0;
}
if(k) printf(“字符串是回文”);
else printf(“字符串不是回文”);
}
Void Initstack (Lstack & ls) //构建一个空栈
{
ls=(snode *)malloc(sizeof(snode));
ls->top= -1;
}