目录
1.结构体设置
typedef int datatype;
typedef struct link{
datatype data;
struct link *next;
} link_t,*plink_t;
2.栈的入栈
/**
***************************************
*@brief : 栈的入栈
*@param :top 栈
*@param :d 数据
*@retval :int 成功返回0 失败返回-1
***************************************
*/
int push(plink_t *top,datatype d)
{
// 创建结点
plink_t p = (plink_t)malloc(sizeof(link_t));
if(p==NULL){
perror("malloc error");
return -1;
}
//将数据存入结点
p->data = d;
//next --> top
p->next = *top;
//将top移动到新的结点上
*top = p;
return 0;
}
3.栈的出栈
/**
***************************************
*@brief : 栈的出栈
*@param :p 栈
*@param :d 数据
*@retval :int 成功返回0 失败返回-1
***************************************
*/
int pop(plink_t *p,datatype *d)
{
//判断栈是否为空
if(*p==NULL){
printf("sorry!栈空\n");
return -1;
}
//将数据传出去
*d = (*p)->data;
//保存当前结点,top往后移动
plink_t node = *p;
(*p) = (*p)->next;
//释放结点
free(node);
return 0;
}
4.栈的遍历
/**
***************************************
*@brief : 栈的遍历
*@param :p 栈
*@param :d 数据
*@retval :int 成功返回0 失败返回-1
***************************************
*/
void display(plink_t p)
{
printf("栈的遍历:\n");
while(p!=NULL){
printf("| %d |\n",p->data);
p = p->next;
}
printf("\n");
}
5.测试(输入正数 入栈,输入负数就出栈)
int main(void)
{
plink_t top = NULL;
//输入正数 入栈,输入负数就出栈
datatype d;
int ret;
while(1)
{
ret = scanf("%d",&d);
if(ret==0)
break;
if(d>0){
push(&top,d);
}else if(d<0){
if(!pop(&top,&d))
printf("%d出栈了\n",d);
}
display(top);
}
return 0;
}