记录常用的一些数据结构之栈
栈:是先进后出(FILO,first in last out)的线性表(stack),它要求只在表尾进行插入和删除。端口有栈顶(top),栈底(button)。
栈的常用操作:进栈(push,压栈)和出栈(pop,弹栈)。
c语言版:
一、栈的定义
typedef struct{
ElemType *base;
ElemType *top;
int StackSize;
}spStack;
二、创建一个栈
#define STACK_INIT_SIZE 100
void initStack(sqStack *s){
s->base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemTpye));
if(!s->base){
exit(0);
}
s->top=s->top;
s->stackSize=STACK_INIT_SIZE;
}
三、入栈操作(push)
#define STACKINCREMENT 10
void push(sqSatck *s, ElemType e){
if(s->top - s->base == s->stackSize){
s->base = (ElemType*)realloc(s->base,(s->stackSize+STACKINCREMENT)*sizeof(ElemType));
if(!s->base)
exit(0);
s->top = s->base + s->stackSize;
s->stackSize = s->stackSize + STACKINCREMENT;
}
*(s->top)=e;
s->top;
}
四、出栈操作(pop)
ElemType pop(sqStack *s, ElemType e){
if(s->top == s->base)
return ;
*e = *--(s->top);
}
五、清空一个栈(clearStack)
void clearStack(){
s->top = s->base;
}
六、销毁一个栈
void destroyStack(){
int i, len;
len = s->stackSize;
for(i = 0; i<len ;i++){
free(s->base);
s->base++;
}
s->base = s-top = NULL;
s->stackSize = 0;
}
七、计算当前容量
int StackLen(sqStack s){
return s.top - s.base;
}
java版本:
java中将栈给封装起来,用起来比c语言好用。所以不需要自己去建立栈的结构框架。下面介绍一下常用的几个函数:
常用的5个函数:
public E push();//出栈
public E pop(); //入栈
public E peek(); //栈顶元素
public boolean empty();//判断栈内是否为空
public int size(); //返回栈内的元素个数
import java.util.Stack;
public class DemoStack{
public static void main(String[] args){
Stack<Integer> stack = new Stack<>();
System.out.println(stack.empty());
stack.push(0);
stack.push(1);
stack.push(2);
System.out.println(stack.size());
System.out.println(stack.peek());
System.out.println(stack.pop());
}
}