欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

順序棧的定義

首先,我們先來簡單了解一下順序棧,前面線性表我們知道,根據(jù)順序存儲或者鏈?zhǔn)酱鎯Ψ譃轫樞虮砗蛦捂湵?,同樣的,根?jù)存儲方式的不同,我們把棧分為順序存儲的棧稱為順序棧,鏈?zhǔn)酱鎯Φ臈7Q為鏈棧。我們要講的就是順序棧。實際上,有了前面線性表的一些知識后,關(guān)于棧的操作我們還是比較容易理解的。

順序棧的理解

問題來了?我們怎么去定義呢?通常我們可以用一個數(shù)組和記錄棧頂元素位置的變量組成,棧頂位置用整型變量Top記錄當(dāng)前棧頂元素的下標(biāo)值。當(dāng)Top==-1時,表示空棧。當(dāng)top==MAXSIZE-1時,表示滿棧。好了,下面開始實現(xiàn)順序棧。

準(zhǔn)備工作

1.宏定義及其重命名

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

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

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

具體實現(xiàn)

1.初始化

/*  構(gòu)造一個空棧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.求長度

/* 返回S的元素個數(shù),即棧的長度 */
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];	/* 將要刪除的棧頂元素賦值給e */
    S->top--;				/* 棧頂指針減一 */
    return OK;
}

8.遍歷

/* 從棧底到棧頂依次對棧中每個元素顯示 */
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 棧的長度為%d\n", e, StackLength(s));
    ClearStack(&s);
    printf("清空棧后,??辗瘢?d(1:空 0:否)\n", StackEmpty(s));
    return 0;
}

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

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

相關(guān)文章

  • c++ vector造成的內(nèi)存泄漏問題

    c++ vector造成的內(nèi)存泄漏問題

    這篇文章主要介紹了c++ vector造成的內(nèi)存泄漏問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++面向?qū)ο髮崿F(xiàn)五子棋小游戲

    C++面向?qū)ο髮崿F(xiàn)五子棋小游戲

    本文介紹了如何運用面向?qū)ο笏枷脒M(jìn)行五子棋游戲的設(shè)計與開發(fā),與面向過程程序設(shè)計比較,面向?qū)ο蟪绦蛟O(shè)計更易于實現(xiàn)對現(xiàn)實世界的描述,提高軟件的擴展性和可維護(hù)性。附上最終的程序源碼,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • 使用C++17實現(xiàn)JSON庫設(shè)計思路示例全解

    使用C++17實現(xiàn)JSON庫設(shè)計思路示例全解

    這篇文章主要為大家介紹了使用C++17實現(xiàn)JSON庫設(shè)計思路示例全解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C語言 自增自減運算的區(qū)別詳解及實例

    C語言 自增自減運算的區(qū)別詳解及實例

    這篇文章主要介紹了C語言中的++a和a++的區(qū)別詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C語言排序方法(冒泡,選擇,插入,歸并,快速)

    C語言排序方法(冒泡,選擇,插入,歸并,快速)

    這篇文章給大家分享C語言所有經(jīng)典排序方法,文章給大家提供完整的實例代碼幫助大家快速學(xué)習(xí)掌握C語言排序方法,感興趣的朋友一起看看吧
    2021-08-08
  • C++類URL編碼和解碼使用技巧

    C++類URL編碼和解碼使用技巧

    在項目開發(fā)過程中,經(jīng)常會使用到c++ 的url編碼和解碼,本文將以此問題詳細(xì)介紹使用技巧,需要的朋友可以參考下
    2012-11-11
  • c_str()的用法詳細(xì)解析

    c_str()的用法詳細(xì)解析

    c_str()就是把string類對象轉(zhuǎn)換成和c兼容的char *類型。這是為了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數(shù)c_str()把string 對象轉(zhuǎn)換成c中的字符串樣式
    2013-09-09
  • C++實現(xiàn)LeetCode(6.字型轉(zhuǎn)換字符串)

    C++實現(xiàn)LeetCode(6.字型轉(zhuǎn)換字符串)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(6.字型轉(zhuǎn)換字符串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 基于C++實現(xiàn)BMI身體質(zhì)量指數(shù)計算工具

    基于C++實現(xiàn)BMI身體質(zhì)量指數(shù)計算工具

    BMI(Body?Mass?Index,身體質(zhì)量指數(shù)),也稱為體重指數(shù),是一種常用的衡量成人人體肥胖程度的指標(biāo),本文就來用C++編寫一個簡單的BMI計算工具吧
    2023-10-10
  • vscode C++遠(yuǎn)程調(diào)試運行(學(xué)習(xí)C++用)

    vscode C++遠(yuǎn)程調(diào)試運行(學(xué)習(xí)C++用)

    這篇文章主要介紹了vscode C++遠(yuǎn)程調(diào)試運行(學(xué)習(xí)C++用),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04

最新評論