1 栈(stack)是限定尽在表尾进行插入和删除操作的线性表。
2 栈中允许插入和删除的一端称为栈顶(top),另一端称为栈底(buttom),不含任何数据元素的栈称为空栈(empty)。
3 栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。
4 栈的插入操作,叫进栈,也称压栈、入栈。
5 栈的删除操作,叫出栈,也又叫作弹栈。
栈的图例:
栈顺序存储结构代码的实现:
#include <stdio.h>
const int MAXSIZE = 10; //stack size
//stack struction
typedef struct {
int data[MAXSIZE];
int top; //stack size, empty stack top=-1
}Stack;
//initialize stack
bool initStack(Stack **s){
*s = new Stack;
(*s)->top = -1; //empty stack top=-1
return true;
}
//initialize stack
Stack* initStack(){
Stack *s = new Stack;
s->top = -1;
return s;
}
//empty stack
bool emptyStack(Stack *s)
{
return (-1 == s->top);
}
//push stack
bool Push(Stack *s, int value){
if(NULL == s) return false;
if(MAXSIZE <= s->top + 1) return false;
++(s->top);
s->data[s->top] = value;
return true;
}
//pop stack
bool Pop(Stack *s, int *value){
if(NULL == s) return false;
if(0 > s->top) return false;
*value = s->data[s->top--];
return true;
}
//test stack
void testStack(){
int i = 0;
//Stack *s = NULL;
//initStack(&s); or
Stack* s = initStack();
while(true){
if(!Push(s, i)) break;
++i;
}
while(true){
if(!Pop(s, &i)) break;
printf("%d ", i);
}
printf("\n");
if(emptyStack(s)){
printf("Empty Stack!\n");
}
return ;
}
int main(int argc, char *argv[])
{
testStack();
}
参考资料:《大话数据结构》