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;
}