在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ 線性堆棧
hash表
單詞統(tǒng)計(jì)
鏈表排序
查找
可變參數(shù)
爬樓梯
內(nèi)存
prim算法 中
線性結(jié)構(gòu)的處理
數(shù)據(jù)選擇
prim算法 上
循環(huán)單向鏈表
基數(shù)排序
堆排序
鏈表重合
排序二叉樹的保存和加載
圖添加和刪除
排序二叉樹線索化
非遞歸排序
字符串查找 下篇
鏈表逆轉(zhuǎn)
函數(shù)堆棧顯示
遞歸和堆棧
二叉樹深度遍歷
線性隊(duì)列
循環(huán)和遞歸
快速排序
尋找丟失的數(shù)
A*算法
克魯斯卡爾算法 下
排序二叉樹
大數(shù)計(jì)算
二叉樹廣度遍歷
prim算法 下
洗牌算法
圖結(jié)構(gòu)
最大公約數(shù)、最小公倍數(shù)
圖創(chuàng)建
雙向鏈表
字符串查找 上篇
尋路
通用算法的編寫
哈夫曼樹 下
線性堆棧
八皇后
排序二叉樹刪除-1
挑選最大的n個(gè)數(shù)
字符串查找 中篇
哈夫曼樹 上
合并排序
回?cái)?shù)
選擇排序
哈希二叉樹
通用數(shù)據(jù)結(jié)構(gòu)
“數(shù)星星”
單向鏈表
排序二叉樹插入
圖的保存
排序二叉樹刪除-2
排序二叉樹刪除-3
n!中末尾零的個(gè)數(shù)統(tǒng)計(jì)

線性堆棧

前面我們講到了隊(duì)列,今天我們接著討論另外一種數(shù)據(jù)結(jié)構(gòu):堆棧。堆棧幾乎是程序設(shè)計(jì)的命脈,沒(méi)有堆棧就沒(méi)有函數(shù)調(diào)用,當(dāng)然也就沒(méi)有軟件設(shè)計(jì)。那么堆棧有什么特殊的屬性呢?其實(shí),堆棧的屬性主要表現(xiàn)在下面兩個(gè)方面:

(1)堆棧的數(shù)據(jù)是先入后出

(2)堆棧的長(zhǎng)度取決于棧頂?shù)母叨?/p>

那么,作為連續(xù)內(nèi)存類型的堆棧應(yīng)該怎么設(shè)計(jì)呢?大家可以自己先試一下:

(1)設(shè)計(jì)堆棧節(jié)點(diǎn)

typedef struct _STACK_NODE
{
    int* pData;
    int length;
    int top;
}STACK_NODE;

(2)創(chuàng)建堆棧

STACK_NODE* alloca_stack(int number)
{
    STACK_NODE* pStackNode = NULL;
    if(0 == number)
        return NULL;

    pStackNode = (STACK_NODE*)malloc(sizeof(STACK_NODE));
    assert(NULL != pStackNode);
    memset(pStackNode, 0, sizeof(STACK_NODE));

    pStackNode->pData = (int*)malloc(sizeof(int) * number);
    if(NULL == pStackNode->pData){
        free(pStackNode);
        return NULL;
    }

    memset(pStackNode->pData, 0, sizeof(int) * number);
    pStackNode-> length = number;
    pStackNode-> top= 0;
    return pStackNode;
}

(3)釋放堆棧

STATUS free_stack(const STACK_NODE* pStackNode)
{
    if(NULL == pStackNode)
        return FALSE;

    assert(NULL != pStackNode->pData);

    free(pStackNode->pData);
    free((void*)pStackNode);
    return TRUE;
}

(4)堆棧壓入數(shù)據(jù)

STATUS stack_push(STACK_NODE* pStackNode, int value)
{
    if(NULL == pStackNode)
        return FALSE;

    if(pStackNode->length == pStackNode->top)
        return FALSE;

    pStackNode->pData[pStackNode->top ++] = value;
    return TRUE;
}

(5)堆棧彈出數(shù)據(jù)

STATUS stack_pop(STACK_NODE* pStackNode, int* value)
{
    if(NULL == pStackNode || NULL == value)
        return FALSE;

    if(0 == pStackNode->top)
        return FALSE;

    *value = pStackNode->pData[-- pStackNode->top];
    return TRUE;
}

(6)統(tǒng)計(jì)當(dāng)前堆棧中包含多少數(shù)據(jù)

int count_stack_number(const STACK_NODE* pStackNode)
{
    return pStackNode->top;
}

建議: 堆棧是函數(shù)調(diào)用的基礎(chǔ),是遞歸調(diào)用的基礎(chǔ),是很多問(wèn)題的根源,建議朋友們平時(shí)有時(shí)間好好練習(xí)一下。