栈的顺序存储结构
/**
*顺序栈及其相关操作
*/
# include <stdio.h>
# include <malloc.h>
# define MAXSIZE 20
typedef struct stack * pStack;
struct stack{
int data[MAXSIZE];
int top; //指示栈顶元素index
};
//初始化一个空栈
pStack init(){
pStack p = (pStack)malloc(sizeof(struct stack));
p->top = -1; //没有任何元素
return p;
}
//入栈
void push(pStack p, int target){
if(p->top == MAXSIZE -1){
printf("栈满!");
return;
}else{
p->data[++p->top] = target; //元素入栈,top值+1
}
}
//出栈
int pop(pStack p){
int val;
if(p->top == -1){
printf("栈空!");
return NULL;
}else{
val = p->data[p->top--]; //先让它出栈再让top值-1
return val;
}
}
//获取栈顶元素
int getTop(pStack p){
return p->data[p->top];
}
//遍历一个栈
void print(pStack p){
int val = 0; //存放指针指向的值
int pos = p->top; //遍历指针
while(pos != -1){
val = p->data[pos--];
printf("%d ", val);
}
printf("\n");
}
//test
int main (void){
pStack p = init();
for(int i = 0; i < MAXSIZE; i++)
push(p,i);
print(p);
for(i = 0; i < MAXSIZE; i++)
pop(p);
for(i = 0; i < MAXSIZE; i++)
push(p,i);
print(p);
return 0;
}