C語言 數據結構 棧

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章