回文数、括号匹配(栈操作)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                回文数、括号匹配(栈操作)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                回文數(shù)
“xyzyx”是一個(gè)回文字符串,所謂回文字符串就是指正讀反讀均相同的字符序列,如“席主席”、“記書記”、“aha”和“ahaha”均是回文,但“ahah”不是回文。輸入一行字符(僅包含小寫英文字母a~z)請(qǐng)判斷這行字符串是否為回文。
輸入格式:
 只有一行,僅包含小寫英文字母a~z的字符串,長(zhǎng)度小于等于100。
 輸出格式:
 只有一行,如果是回文請(qǐng)輸出YES,不是回文則輸出NO,請(qǐng)注意大小寫。
樣例 1 :
 輸入:
 ahah
 輸出:
 NO
樣例 2 :
 輸入:
 ahaha
 輸出:
 YES
代碼如下:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std;struct stack//首先定義一個(gè)棧 {int data[101];//數(shù)據(jù)域int top;//棧頂 };int main() {char a[101];struct stack sq;int i,len,mid,next;gets(a);len=strlen(a);mid=len/2-1;sq.top=0;//初始化棧,棧頂為0for(i=0;i<=mid;i++){//因?yàn)槭腔匚臄?shù),只需要入棧輸入的字符串的一半即可sq.data[++sq.top]=a[i];//入棧}if(len%2==0)//偶數(shù)next=mid+1;//左一半入棧,然后與右一半比較else//奇數(shù)next=mid+2;//中間那個(gè)數(shù)不需要入棧,也不需要比較,需要+2,跳過中間那個(gè)數(shù)for(i=next;i<=len-1;i++){//后一半與棧內(nèi)前一半元素進(jìn)行比較if(a[i]!=sq.data[sq.top]){//開始于棧內(nèi)數(shù)據(jù)對(duì)比,若與棧頂不同,結(jié)束即可break;}sq.top--;//若相同,元素出棧,top--指向下一個(gè)棧頂元素}if(sq.top==0)//最后的結(jié)果若棧內(nèi)所有元素都出棧表示是回文數(shù)printf("YES");elseprintf("NO");return 0; }括號(hào)匹配
在編程當(dāng)中我們只會(huì)用到三種括號(hào):圓括號(hào)(),方括號(hào)[]和花括號(hào){},編譯器在編譯的時(shí)候會(huì)檢查括號(hào)是否正確匹配。例如{[()]}、{()[]{}}都是合法的匹配。但是([)]則是不合法的匹配。請(qǐng)編寫一個(gè)程序來判斷輸入的括號(hào)序列是否合法。
輸入格式:
 只有一行,為( ) [ ] { }組成的序列,長(zhǎng)度不超過100
輸出格式:
 只有一行,如果是合法匹配則輸出YES,不合法則輸出NO,請(qǐng)注意大小寫
樣例 1 :
 輸入:
 {([()]{})}
輸出:
 YES
代碼如下:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std;struct stack//定義棧 {int data[101];//數(shù)據(jù)域int top;//棧頂 };int main() {char a[101];int i,len,mid,next;struct stack sq;gets(a);len=strlen(a);sq.top=0;if(len%2 != 0){//奇數(shù)個(gè),肯定不匹配,直接結(jié)束即可printf("NO");return 0;}if(a[0]=='(' || a[0]=='[' || a[0]=='{'){//第一個(gè)字符必須是三個(gè)左括號(hào)之一for(i=0;i<=len-1;i++){if(a[i]=='{' || a[i]=='[' || a[i]=='('){//若為左半括號(hào)進(jìn)行入棧操作sq.data[++sq.top]=a[i];}if(a[i]=='}' || a[i]==']' || a[i]==')'){//若為右半括號(hào)開始出棧進(jìn)行比較if((sq.data[sq.top]=='(' && a[i]==')') || (sq.data[sq.top]=='[' && a[i]==']') || (sq.data[sq.top]=='{' && a[i]=='}') )//左右括號(hào)得配對(duì)sq.top--;//配對(duì),出棧else//否則不匹配結(jié)束break;}}}else{//第一個(gè)字符不是三個(gè)左括號(hào)之一,匹配肯定不成功printf("NO");return 0;}if(sq.top==0)//若棧內(nèi)元素都出棧,表示匹配成功printf("YES");elseprintf("NO");return 0; }總結(jié)
以上是生活随笔為你收集整理的回文数、括号匹配(栈操作)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 琥珀价格多少钱一克啊?
 - 下一篇: 石狮子多少钱一对啊?