stack是一种操作受限制的线性表。值允许在表的一段插入和删除。插入叫进栈,删除叫出栈。进行操作的一段叫栈顶。栈的特性是后进先出。
可以用两种方式来实现栈的存储。1:链式存储,2:顺序存储。
下面是顺序存储:
#include "stdio.h"
#define TYPE struct student
#define LEN sizeof(TYPE)
#define NULL 0
struct student{
int no[10];
int top;
};
TYPE *init(){
TYPE *stack=(TYPE *)malloc(LEN);
stack->top=-1;
return stack;
}
TYPE *push(TYPE *stack){
int no;
printf("please input the no:");
scanf("%d",&no);
stack->top++;
stack->no[stack->top]=no;
return stack;
}
TYPE *pull(TYPE *stack){
printf("%d",stack->no[stack->top]);
stack->no[stack->top]=NULL;
stack->top--;
return stack;
}
void clearStack(TYPE *stack){
free(stack);
}
main(){
int i;
TYPE *stack;
stack=init();
for(i=0;i<10;i++){
stack=push(stack);
}
pull(pull(stack));
getch();
}
链式存储:
可以用两种方式来实现栈的存储。1:链式存储,2:顺序存储。
下面是顺序存储:
#include "stdio.h"
#define TYPE struct student
#define LEN sizeof(TYPE)
#define NULL 0
struct student{
int no[10];
int top;
};
TYPE *init(){
TYPE *stack=(TYPE *)malloc(LEN);
stack->top=-1;
return stack;
}
TYPE *push(TYPE *stack){
int no;
printf("please input the no:");
scanf("%d",&no);
stack->top++;
stack->no[stack->top]=no;
return stack;
}
TYPE *pull(TYPE *stack){
printf("%d",stack->no[stack->top]);
stack->no[stack->top]=NULL;
stack->top--;
return stack;
}
void clearStack(TYPE *stack){
free(stack);
}
main(){
int i;
TYPE *stack;
stack=init();
for(i=0;i<10;i++){
stack=push(stack);
}
pull(pull(stack));
getch();
}
链式存储: