回文判斷。稱正讀與反讀都相同的字串行為回文序列

2021-08-20 06:10:35 字數 2672 閱讀 2756

試寫乙個演算法,判斷依次讀入的乙個以@為結束符的字母序列,是否為形如「序列1&序列2」模式的字串行。其中序列1和序列2都不含字元「&」,且序列2是序列1的逆序列。例如,"a+b&b+a"是屬該模式的字串行,而"1+3&3-1"則不是。

使用鏈式棧鏈式佇列來實現這一演算法。

/*檢測是否為回文序列*/

int check(char *str,linkstack ls, linkqueue* lq)

while (str[i] != '@');

/*當棧不為空時迴圈彈棧和出隊,如果遇到出棧的元素data與出隊的元素不同

則不是回文序列,如果站為空,依然沒要遇到出隊與出棧元素不同則為回文序列*/

while (!isempty(ls)) }

printf("是回文字元序列!\n");

}

**源程式**

#include #include #include #include #define maxsize 50      //字元陣列的最大長度

typedef char datatype;

/*使用linkqueuenode定義佇列中的結點,使用lstacknode定義鏈式棧中的節點,

由於在鏈式棧的初始化中要改變棧頂指標top的指向,所以需要傳二級指標,定義

乙個指標型別linkstack,使用linkstack定義指標型別變數,使用linkstack*定

義二級指標變數*/

typedef struct node

linkqueuenode,lstacknode, *linkstack;

typedef struct

linkqueue;

/* ********************鏈棧的相關操作函式************************* */

/*鏈棧的初始化*/

void initstack(linkstack* top)

/*判斷鏈棧是否為空*/

int isempty(linkstack top)

return 0;

}/*進棧操作*/

void pushstack(linkstack top, datatype data)

/*出棧操作*/

int popstack(linkstack top, datatype* data)

else }

/*銷毀鏈棧*/

void destorystack(linkstack top)}

/* ********************鏈式佇列的相關操作函式************************* */

/*初始化佇列*/

void initlinkqueue(linkqueue* lq)

/*入隊操作*/

void enterqueue(linkqueue* lq, datatype data)

/*出隊操作*/

int deletequeue(linkqueue* lq, datatype* data)

/*pdel指向隊頭元素,由於隊頭指標front指向頭結點,所以pdel指向頭結點的下乙個結點*/

linkqueuenode* pdel = lq->front->_next;

*data = pdel->_data; /*將要出隊的元素賦給data*/

lq->front->_next = pdel->_next; /*使指向頭結點的指標指向pdel的下乙個結點*/

/*如果佇列中只有乙個元素,將佇列置空*/

if (lq->rear = pdel)

free(pdel); /*釋放pdel指向的空間*/

return *data;

}/*銷毀鏈佇列*/

void destryqueue(linkqueue* lq)

}///

/*檢測是否為回文序列*/

int check(char *str,linkstack ls, linkqueue* lq)

while (str[i] != '@');

/*當棧不為空時迴圈彈棧和出隊,如果遇到出棧的元素data與出隊的元素不同

則不是回文序列,如果站為空,依然沒要遇到出隊與出棧元素不同則為回文序列*/

while (!isempty(ls)) }

printf("是回文字元序列!\n");

}int main()

測試結果:

輸入:1+2+3&3-2+1@      輸出:不是回文字元序列!

輸入:1+2+3&3+2+1@ 輸出: 是回文字元序列!

輸入:a+b&b+a@ 輸出: 是回文字元序列!

輸入:1234554321@ 輸出:是回文字元序列!

輸入:123aba321@ 輸出:是回文字元序列!

輸入:aba@11134 輸出:是回文字元序列!

輸入:123a321b111@ 輸出:不是回文字元序列!

判斷回文數與回文字串

判斷乙個數是否為回文數。回文數 回文數也是乙個數字,數字的特點是正反序是同乙個數字,如 12321,3443 思路 給乙個數字,求出它的反序數字,與本身進行比較,相同即是回文數。int palindrome int num return ret int main 判斷乙個字串是否為回文字串。回文字串...

回文數與回文字串的判斷

1.回文數字 判斷乙個數字是不是回文數。回文數的特點是正反序是同乙個數字,如 12321,3443 2.回文字串 判斷乙個字串是不是回文字串。回文字串特點是原字串與字串逆序之後一樣,如 abcba cddc 將數字變為陣列儲存 char arr 10 也可將數字變為字串儲存 memset arr,1...

回文數的判斷與實現(C )

1.回文數 正讀與反讀都一樣的字串或數字 非小數 2.平方回數 1 回文數,2 某個數的平方 3.實現方法 1 利用數的數學特性 2 使用字串的方法 3 使用棧 4.c 數的對稱性的特點 bool huiwen1 int x if n newed return true else return fa...