棧實現判斷迴文

 1 #include<iostream>
 2 #include<cstdlib>
 3 using namespace std;  4 
 5 //順序棧定義
 6 #define OK 1
 7 #define ERROR 0
 8 #define OVERFLOW -2
 9 #define MAXSIZE  100
10 typedef int Status; 11 typedef char SElemType; 12 typedef struct
13 { 14     SElemType *base; 15     SElemType *top; 16     int stacksize; 17 } SqStack; 18 
19 //算法:順序棧的初始化
20 Status InitStack(SqStack &S) 21 { 22     // 構造一個空的順序棧 S
23     S.base = new SElemType[MAXSIZE];  //將base指向新申請的棧數組中
24     if(!S.base) exit(OVERFLOW); //申請失敗,則異常退出
25     S.top = S.base; //將棧底指針賦給棧頂指針,表示空棧
26     S.stacksize = MAXSIZE;  //棧能容納的最大容量
27     return OK;   //申請成功
28 } 29 //算法:順序棧的入棧
30 Status Push(SqStack &S, SElemType &e) 31 { 32     if(S.top-S.base==S.stacksize)   //若是棧滿
33         return ERROR; 34     // 插入元素e爲新的棧頂元素
35     *S.top++ = e;   //先將元素壓棧,棧頂指針指向下一個地址
36     return OK;   //入棧成功
37 } 38 //算法:順序棧的出棧
39 Status Pop(SqStack &S, SElemType &e) 40 { 41     // 若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;不然返回ERROR
42     if (S.base==S.top)  //表示空棧
43         return ERROR;  //返回錯誤
44     e = *--S.top;  //先將棧頂指針減1,再取棧頂元素
45     return OK;  //出棧成功
46 } 47 //算法:判斷是否爲迴文
48 int HuiWen(SElemType *ch, int length)  //ch接收回文字符串數組的基地址,length接收回文字符串長度
49 { 50  SqStack S; 51  SElemType x; 52     int i,j, m = length/2; 53     InitStack(S);     //初始化棧S
54     for(i=0;i<m;++i)   //先將字符數組前一半的元素壓入棧中
55  Push(S,ch[i]); 56     for(j=length-m;j<length;j++){  //從一半後開始,會跳過奇數個數最中間那個數的比較
57         if(Pop(S,x) && x!=ch[j])break;  //若是出棧成功 且出棧元素不和當前字符對應,則跳出
58  } 59     if(j!=length)return ERROR;  //若是j不等於length 說明不是迴文,返回0
60     return OK;  //不然返回1
61 } 62 
63 int main() 64 { 65     cout << "\n********************判斷是否爲迴文************************\n\n"; 66     int i, length, flag = 1; 67     while (flag) 68  { 69         cout << "請輸入一個數,表明迴文字符串的長度:"; 70         cin >> length; //length存放回文字符串長度
71         cout << "請輸入" << length << "個字符:"; 72         SElemType *ch = new SElemType[2 * MAXSIZE]; //ch存放回文字符串數組的基地址
73         for (i = 0; i < length; i++) 74             cin >> ch[i];    //給數組ch 輸入用以判斷的字符串
75         cout << "您要判斷的字符串是:"; 76         for (i = 0; i < length; i++) 77             cout << ch[i];    //顯示數組ch 中的字符串
78         if (HuiWen(ch, length)) 79             cout << ",此字符串是迴文!\n\n" ;    //HuiWen()是判斷迴文的函數,是迴文返回1 ,不是迴文返回0
80         else
81             cout << ",此字符串不是迴文!\n\n" ; 82         cout << "繼續判斷,輸入1,不然輸入0:"; 83         cin >> flag; 84  } 85     return 0; 86 }
相關文章
相關標籤/搜索