1、栈:先进后出(FILO)的数据结构,先进去的数据在底部,最后取出,后进去的数据在顶部,最先被取出。
2、栈的声名:像链表一样有数据值也有指针域。
typedef struct node
{
int val;
struct node *pnext;
}stack;
3、进栈:没啥好解释的一次进一个,注意函数中要用到二级指针。
void s_push(stack **ptop,int n)
{
stack *ptmp = NULL;
ptmp = (stack *)malloc(sizeof(stack));
ptmp->val = n;
ptmp->pnext = *ptop;
*ptop = ptmp;
}
4、出栈:出栈时要将栈顶元素弹出,注意删除节点时要指向NULL;
int s_pop(stack **ptop)
{
if(*ptop == NULL) return -1;
int cnt;
stack *pdel = *ptop;
cnt = pdel->val;
*ptop = (*ptop)->pnext;
free(pdel);
pdel = NULL;
return cnt;
}
5、判栈空?判断栈是否为空。看他头节点是不是空就行了,
int s_empty(stack *ptop)
{
if(ptop != NULL) return 0;
else return 1;
}
6、初始化栈:
stack *Init_SeqStack()
{
//栈初始化
stack* s;
s = (stack*)malloc(sizeof(stack));
if(!s)
{
printf("空间不足\n");
return NULL;
}
else
{
s->nval = -1;
return s;
}
}
测试:
int main()
{
stack *ptop =NULL;
s_push(&ptop,0);
s_push(&ptop,1);
s_push(&ptop,2);
printf("栈内元素有:");
while(!s_empty(ptop))
{
printf("%d ",s_pop(&ptop));
}
printf("\n");
return 0;
}