目录
1.结构体设置
typedef int datatype;
typedef struct stack{
datatype data[N]; //数组
int top; //栈顶指针
} stack_t,*pstack_t;
2.栈的初始化
/**
***************************************
*@brief : 栈的初始化
*@param :None
*@retval :pstack_t : 成功返回地址
* 失败返回NULL
***************************************
*/
pstack_t stack_init(void)
{
// 在堆中开辟空间
pstack_t p = (pstack_t)malloc(sizeof(stack_t));
if(p==NULL){ // malloc 出错
perror("malloc error");
return NULL;
}
p->top = -1; // 栈顶指针设置为-1
return p;
}
3.栈的入栈
/**
***************************************
*@brief : 栈的入栈
*@param :p 栈
*@param :d 数据
*@retval :int 成功返回0 失败返回-1
***************************************
*/
int push(pstack_t p,datatype d)
{
//栈满
if(p->top==N-1){
printf("sorry!栈满\n");
return -1;
}
p->top++;
p->data[p->top]=d;
return 0;
}
4.栈的出栈
/**
***************************************
*@brief : 栈的出栈
*@param :p 栈
*@param :d 数据
*@retval :int 成功返回0 失败返回-1
***************************************
*/
int pop(pstack_t p,datatype *d)
{
if(p->top==-1){
printf("sorry!栈空\n");
return -1;
}
*d = p->data[p->top];
p->top--;
return 0;
}
5. 栈的遍历
/**
***************************************
*@brief : 栈的遍历
*@param :p 栈
*@param :d 数据
*@retval :int 成功返回0 失败返回-1
***************************************
*/
void display(pstack_t p)
{
printf("栈的遍历:\n");
int i;
for(i=p->top;i>=0;i--)
printf("| %d |\n",p->data[i]);
printf("\n");
}
6.测试(输入正数 入栈,输入负数就出栈)
int main(void)
{
pstack_t p = stack_init();
if(p==NULL)
return -1;
printf("%p\n",p);
//输入正数 入栈,输入负数就出栈
datatype d;
int ret;
while(1)
{
ret = scanf("%d",&d);
if(ret==0)
break;
if(d>0){
push(p,d);
}else if(d<0){
if(!pop(p,&d))
printf("%d出栈了\n",d);
}
display(p);
}
return 0;
}