最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言詳解如何實(shí)現(xiàn)順序棧

 更新時(shí)間:2022年04月22日 11:54:52   作者:平凡的人1  
順序棧,就是用一組地址連續(xù)的存儲(chǔ)單元來(lái)存放棧元素,然后用一個(gè)棧結(jié)構(gòu)去維護(hù)一個(gè)棧。在C中,可用動(dòng)態(tài)開辟的數(shù)組去表示,維護(hù)的棧結(jié)構(gòu)需要有一個(gè)棧底和一個(gè)棧頂指針

今天說(shuō)的是關(guān)于數(shù)據(jù)結(jié)構(gòu)順序棧的一些基本操作c語(yǔ)言實(shí)現(xiàn)。

順序棧的定義

首先,我們先來(lái)簡(jiǎn)單了解一下順序棧,前面線性表我們知道,根據(jù)順序存儲(chǔ)或者鏈?zhǔn)酱鎯?chǔ)分為順序表和單鏈表,同樣的,根據(jù)存儲(chǔ)方式的不同,我們把棧分為順序存儲(chǔ)的棧稱為順序棧,鏈?zhǔn)酱鎯?chǔ)的棧稱為鏈棧。我們要講的就是順序棧。實(shí)際上,有了前面線性表的一些知識(shí)后,關(guān)于棧的操作我們還是比較容易理解的。

順序棧的理解

問(wèn)題來(lái)了?我們?cè)趺慈ザx呢?通常我們可以用一個(gè)數(shù)組和記錄棧頂元素位置的變量組成,棧頂位置用整型變量Top記錄當(dāng)前棧頂元素的下標(biāo)值。當(dāng)Top==-1時(shí),表示空棧。當(dāng)top==MAXSIZE-1時(shí),表示滿棧。好了,下面開始實(shí)現(xiàn)順序棧。

準(zhǔn)備工作

1.宏定義及其重命名

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存儲(chǔ)空間初始分配量 */
typedef int Status; 
typedef int SElemType; /* SElemType類型根據(jù)實(shí)際情況而定,這里假設(shè)為int */

2.結(jié)構(gòu)體(順序棧的表示方式)

/* 順序棧結(jié)構(gòu) */
typedef struct
{
        SElemType data[MAXSIZE];
        int top; /* 用于棧頂指針 */
}SqStack;

具體實(shí)現(xiàn)

1.初始化

/*  構(gòu)造一個(gè)空棧S */
Status InitStack(SqStack *S)
{ 
        /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */
        S->top=-1;
        return OK;
}

2.清空

/* 把S置為空棧 */
Status ClearStack(SqStack *S)
{ 
        S->top=-1;
        return OK;
}

3.判斷是否為空

/* 若棧S為空棧,則返回TRUE,否則返回FALSE */
Status StackEmpty(SqStack S)
{ 
        if (S.top==-1)
                return TRUE;
        else
                return FALSE;
}

4.求長(zhǎng)度

/* 返回S的元素個(gè)數(shù),即棧的長(zhǎng)度 */
int StackLength(SqStack S)
{ 
        return S.top+1;
}

5.求棧頂元素

/* 若棧不空,則用e返回S的棧頂元素,并返回OK;否則返回ERROR */
Status GetTop(SqStack S, SElemType* e)
{
    if (S.top == -1) {
        return ERROR;
    }
    else {
        *e = S.data[S.top];
        return OK;
    }
}

6.入棧(判斷是否滿了)

/* 插入元素e為新的棧頂元素 */
Status Push(SqStack* S, SElemType e)
{
    if (S->top == MAXSIZE - 1) /* 棧滿 */
    {
        return ERROR;
    }
    S->top++;				/* 棧頂指針增加一 */
    S->data[S->top] = e;  /* 將新插入元素賦值給棧頂空間 */
    return OK;
}

7.出棧(判斷是否為空)

/* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */
Status Pop(SqStack* S, SElemType* e)
{
    if (S->top == -1)
        return ERROR;
    *e = S->data[S->top];	/* 將要?jiǎng)h除的棧頂元素賦值給e */
    S->top--;				/* 棧頂指針減一 */
    return OK;
}

8.遍歷

/* 從棧底到棧頂依次對(duì)棧中每個(gè)元素顯示 */
Status StackTraverse(SqStack S)
{
    int i;
    i = 0;
    while (i <= S.top)
    {
        visit(S.data[i++]);
    }
    printf("\n");
    return OK;
}
Status visit(SElemType c)
{
    printf("%d ", c);
    return OK;
}

主函數(shù)

int main()
{
    int j;
    SqStack s;
    int e;
    if (InitStack(&s) == OK)
        for (j = 1; j <= 10; j++)
            Push(&s, j);
    printf("棧中元素依次為:");
    StackTraverse(s);
    Pop(&s, &e);
    printf("彈出的棧頂元素 e=%d\n", e);
    printf("??辗瘢?d(1:空 0:否)\n", StackEmpty(s));
    GetTop(s, &e);
    printf("棧頂元素 e=%d 棧的長(zhǎng)度為%d\n", e, StackLength(s));
    ClearStack(&s);
    printf("清空棧后,棧空否:%d(1:空 0:否)\n", StackEmpty(s));
    return 0;
}

好啦,本次順序棧的一些知識(shí)就結(jié)束了。

到此這篇關(guān)于C語(yǔ)言詳解如何實(shí)現(xiàn)順序棧的文章就介紹到這了,更多相關(guān)C語(yǔ)言順序棧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度入門

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度入門

    這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度的入門教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • C++字符串提取和分割的多種方法

    C++字符串提取和分割的多種方法

    在C++編程中,字符串處理是一個(gè)常見的任務(wù),尤其是在需要從字符串中提取特定數(shù)據(jù)時(shí),本文將詳細(xì)探討如何使用C++標(biāo)準(zhǔn)庫(kù)中的工具來(lái)提取和分割字符串,并分析不同方法的適用場(chǎng)景和優(yōu)缺點(diǎn),我們將通過(guò)多個(gè)示例代碼逐步講解,幫助讀者掌握字符串處理的技巧,需要的朋友可以參考下
    2025-03-03
  • C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類的詳細(xì)過(guò)程

    C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類的詳細(xì)過(guò)程

    C++中將string封裝為單獨(dú)的類,string?類是?C++?標(biāo)準(zhǔn)庫(kù)中的一個(gè)非常重要的類,用于表示和操作字符串,這篇文章主要介紹了C++標(biāo)準(zhǔn)庫(kù)介紹及使用string類,需要的朋友可以參考下
    2024-08-08
  • C++面試八股文之了解auto關(guān)鍵字

    C++面試八股文之了解auto關(guān)鍵字

    這篇文章主要為大家介紹了C++面試八股文之了解auto關(guān)鍵字問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • C++內(nèi)存管理詳細(xì)解析

    C++內(nèi)存管理詳細(xì)解析

    這篇文章主要給大家分享的是C++內(nèi)存管理的詳細(xì)內(nèi)容學(xué)習(xí),下面文章圍繞C++內(nèi)存管理的相關(guān)資料展開具體學(xué)習(xí)內(nèi)容,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-11-11
  • map插入自定義對(duì)象總結(jié)

    map插入自定義對(duì)象總結(jié)

    黑樹在插入節(jié)點(diǎn)時(shí),必須依照大小比對(duì)之后在一個(gè)合適的位置上執(zhí)行插入動(dòng)作。所以作為關(guān)鍵字,起碼必須有“<”這個(gè)比較操作符
    2013-09-09
  • C++詳解如何實(shí)現(xiàn)兩個(gè)線程交替打印

    C++詳解如何實(shí)現(xiàn)兩個(gè)線程交替打印

    這篇文章主要介紹了使用C++庫(kù)實(shí)現(xiàn)兩個(gè)線程交替打印,一個(gè)線程打印奇數(shù)、一個(gè)線程打印偶數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語(yǔ)言文件操作入門指南

    C語(yǔ)言文件操作入門指南

    我們?cè)谙爰热皇峭ㄓ嶄浘蛻?yīng)該把信息記錄下來(lái),只有我們自己選擇刪除數(shù)據(jù)的時(shí)候,數(shù)據(jù)才不復(fù)存在,這就涉及到了數(shù)據(jù)持久化的問(wèn)題,我們一般數(shù)據(jù)持久化的方法有,把數(shù)據(jù)存放在磁盤文件、存放到數(shù)據(jù)庫(kù)等方式,使用文件我們可以將數(shù)據(jù)直接存放在電腦的硬盤上,做到了數(shù)據(jù)的持久化
    2024-08-08
  • C++?反向迭代器模擬實(shí)現(xiàn)

    C++?反向迭代器模擬實(shí)現(xiàn)

    反向迭代器reverse_iterator是一種反向遍歷容器的迭代器,也就是從最后一個(gè)元素到第一個(gè)元素遍歷容器,本文主要介紹了C++?反向迭代器模擬實(shí)現(xiàn),感興趣的可以了解一下
    2024-01-01
  • C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和

    C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)求動(dòng)態(tài)矩陣各元素的和,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論

宽甸| 黑山县| 武胜县| 永修县| 鹤壁市| 华亭县| 灵宝市| 新田县| 库尔勒市| 浮梁县| 蓬溪县| 通道| 东方市| 米脂县| 娱乐| 和田县| 浮山县| 正镶白旗| 江都市| 通州市| 淮安市| 保山市| 游戏| 新河县| 堆龙德庆县| 米林县| 上犹县| 营口市| 长宁县| 金乡县| 德化县| 沭阳县| 龙州县| 合水县| 广汉市| 金塔县| 常熟市| 哈巴河县| 安义县| 郧西县| 赞皇县|