算法判定是否为回文

算法分析:回文是指正读和反读均相同的字符序列,例如:“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->data;

   ls->top++;

   ls->data[ls->top]=ch;         // 将ch 送人栈定指针*ls所指向的单元(Snode *ls;)

   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-> data[ls->top--];         //将栈顶指针所指向的单元内的值赋给ch

     if(p->data= =ch)            //若p指向的节点字符等于顺序栈中栈顶指向的字符,则p 顺链后移;若p指向的节点字符不等于顺序栈中栈顶指向的字符,则k=0

      p=p->next;

else

      k=0;

}

if(k) printf(“字符串是回文”);

else printf(“字符串不是回文”);

}

Void Initstack (Lstack & ls) //构建一个空栈

{

   ls=(snode *)malloc(sizeof(snode));

   ls->top= -1;

}

发布了31 篇原创文章 · 获赞 9 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章