本文主要内容:顺序栈,链式栈
栈:所有的操作都在栈顶,先入后出(FILO)
TOP类似一个顺序表的尾标last。
本文只描述类似于“第二代”顺序表的栈和链式栈。
栈(类似于第二代顺序表)
定义结构体:
typedef struct node{
data_t *data;//存储数据 int size;//存数据元素个数 int top;//标记栈顶数据元素的位置}mystack_t;//栈的数据类型
创建:
mystack_t* create_stack(int size) {
if(size<=0||size>=20000) return NULL; //申请栈标识的空间 mystack_t* stack=malloc(sizeof(mystack_t)); if(stack == NULL) {
printf("标识申请失败!\n"); return NULL; } //申请存储数据的空间 stack->data=malloc(sizeof(data_t)*size); if(stack->data == NULL) {
printf("空间申请失败!\n"); return NULL; } //初始化 stack->size=size; stack->top=-1; //返回申请空间的首地址 return stack;}
判满判空:
//判满int isfull_satck(mystack_t* stack){
return stack->top==stack->size-1;}//判空int isnull_stack(mystack_t* stack){
return stack->top==-1;}
入栈push:
int push_stack(mystack_t* stack,data_t data) {
if(stack==NULL||isfull_satck(stack)) return -1; //增加数据(在top+1的位置上增加数据) stack->data[stack->top]=data; //修改top的位置 stack->top++; return 0;}
出栈:
int pop_sta