棧實現判斷回文


 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM