算法判定是否爲迴文

算法分析:迴文是指正讀和反讀均相同的字符序列,例如:“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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章