各位看官們,大家好,前幾回中咱們說了堆棧的原理,并且舉了實(shí)際的例子進(jìn)行解說,這一回咱們說的例 子是:括號(hào)匹配。括號(hào)匹配使用了堆棧的原理,大家可以從例子看出來,所以我們把它們放在一起。閑話 休提,言歸正轉(zhuǎn)。讓我們一起talk C栗子吧!
看官們,所謂的括號(hào)匹配,就是給了一連串括號(hào),里面有各種類型的的括號(hào),然后確定該串中的括號(hào)是否 是一一 匹配的。例如:({[]})這串括號(hào)中的括號(hào)就是匹配的。因?yàn)榇械睦ㄌ?hào)都是成對(duì)出現(xiàn)。(({)這串括號(hào)就 不是匹配的,串中{沒有與它配對(duì)的括號(hào),而且與(匹配的括號(hào)數(shù)量也不正確。
在確認(rèn)括號(hào)是否匹配的過程中,我們的思路是這樣的:首先依次從串中讀取括號(hào),每次讀取一個(gè)括號(hào),如 果讀取的括號(hào)是左括號(hào),比如(,{,[,那么就讓括號(hào)入棧,如果讀取的是右括號(hào),比如),},],那么就把棧頂?shù)?括號(hào)取出來,和它匹配,如果匹配,就繼續(xù)進(jìn)行判斷串中的下一個(gè)括號(hào),如果不匹配,那么就說明該串中 的括號(hào)不匹配。
看官們,詳細(xì)的代碼如下,請(qǐng)大家參考:
1 /* **************************
2 * For ParenthesisMatching
3 * *************************/
4
5 #include<stdio.h>
6
7 #define SIZE 10
8
9 char array[SIZE]; //using the array for stack
10 typedef struct _Stack
11 {
12 char *top;
13 int size;
14 }Stack;
15
16 int push(Stack *s,char ch)
17 {
18 if(NULL == s)
19 return 0;
20
21 if(s->size < SIZE)
22 {
23 *(s->top) = ch;
24 s->top++;
25 s->size++;
26
27 return 1;
28 }
29 else
30 return 0;
31 }
32
33 int pop(Stack *s, char *ch)
34 {
35 if(NULL == s)
36 return 0;
37
38 if(s->size > 0)
39 {
40 s->top--;
41 s->size--;
42 *ch = *(s->top);
43
44 return 1;
45 }
46 else
47 return 0;
48 }
49
50 int main()
51 {
52 char parenthesis[SIZE]={'(','{','[',']','}',')','[','{','}',']'}; // parenthesis ,you can init it by your self
53 int i;
54 int result;
55 char ch;
56 Stack s ; // stack defination and init
57 s.top = &array[0];
58 s.size =0;
59
60 result =0;
61 for(i=0; i<SIZE; ++i)
62 {
63 ch = parenthesis[i];
64
65 switch(ch)
66 {
67 case '(':
68 case '{':
69 case '[':
70 if(!push(&s,ch) )
71 return 0;
72 break;
73 case ')':
74 if(!pop(&s,&ch))
75 return 0;
76
77 if( ch != '(')
78 {
79 result = 1;
80 }
81 break;
82 case '}':
83 if(!pop(&s,&ch))
84 return 0;
85
86 if( ch != '{')
87 {
88 result = 1;
89 }
90 break;
91 case ']':
92 if(!pop(&s,&ch))
93 return 0;
94
95 if( ch != '[')
96 {
97 result = 1;
98 }
99 break;
100 default:
101 break;
102 }
103
104 if(1 == result)
105 {
106 printf("Parenthesis is not matching \n");
107 break;
108 }
109 }
110
111 if(0 == result)
112 {
113 printf("Parenthesis is matching \n");
114 }
115
116 return 0;
117 }
各位看官,關(guān)于括號(hào)匹配的例子咱們就說到這里。欲知后面還有什么例子,且聽下回分解。