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;
}