試寫乙個演算法,判斷依次讀入的乙個以@為結束符的字母序列,是否為形如「序列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...