2 棧
2.1 什麼是棧
棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱爲棧頂,相對地,把另一端稱爲棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。
棧這個概念比較淺顯易懂,設想一個場景,我們經常會遇到堆箱子的場景,首先放下的箱子就會被後來的箱子壓在最底層,這個箱子就被稱爲棧底,而後來堆上來的最頂層的箱子就被稱爲棧頂,新元素進入的過程我們就稱它爲入棧。當我們從這個箱子堆裏取出箱子的時候,肯定是要先取出最頂層的箱子 (下面的箱子被壓住了拿不出來),這個過程被稱爲出棧。棧中元素的特性就是先入後出 (First In Last Out)。
2.2 棧的組成
棧由棧底、棧頂和數據數組三部分組成
下面是一個棧的結構體示例
struct stack{
/*--這是一個棧的結構體,包含數據數組和棧頂,棧底爲data[0]--*/
int data[100];
int top
};
2.3 如何實現一個棧
以下是示例代碼,完成了基於棧的迴文判斷操作
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
/*--這是基於stack(棧)來實現的一個迴文判斷--*/
char a[101],s[101];
int i,len,mid,next,top;
gets(a);
len = strlen(a);
mid = len / 2 - 1;
top = 0;
for(i = 0;i <=mid;i++){
s[++top] = a[i];
}
if(len%2 == 0){
next = mid + 1;
}
else{
next = mid + 2;
}
for(i = next; i <= len - 1;i++){
if(a[i] != s[top]){
break;
}
top--;
}
if(top == 0){
printf("YES");
}
else{
printf("no");
}
system("pause");
return 0;
}