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

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

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

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

順序棧的定義

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

順序棧的理解

問題來了?我們怎么去定義呢?通常我們可以用一個數(shù)組和記錄棧頂元素位置的變量組成,棧頂位置用整型變量Top記錄當前棧頂元素的下標值。當Top==-1時,表示空棧。當top==MAXSIZE-1時,表示滿棧。好了,下面開始實現(xià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ù)實際情況而定,這里假設為int */

2.結構體(順序棧的表示方式)

/* 順序棧結構 */
typedef struct
{
        SElemType data[MAXSIZE];
        int top; /* 用于棧頂指針 */
}SqStack;

具體實現(xiàn)

1.初始化

/*  構造一個空棧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;
}

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

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

相關文章

  • C語言數(shù)據(jù)結構與算法之時間空間復雜度入門

    C語言數(shù)據(jù)結構與算法之時間空間復雜度入門

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

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

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

    C++標準庫介紹及使用string類的詳細過程

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

    C++面試八股文之了解auto關鍵字

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

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

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

    map插入自定義對象總結

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

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

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

    C語言文件操作入門指南

    我們在想既然是通訊錄就應該把信息記錄下來,只有我們自己選擇刪除數(shù)據(jù)的時候,數(shù)據(jù)才不復存在,這就涉及到了數(shù)據(jù)持久化的問題,我們一般數(shù)據(jù)持久化的方法有,把數(shù)據(jù)存放在磁盤文件、存放到數(shù)據(jù)庫等方式,使用文件我們可以將數(shù)據(jù)直接存放在電腦的硬盤上,做到了數(shù)據(jù)的持久化
    2024-08-08
  • C++?反向迭代器模擬實現(xiàn)

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

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

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

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

最新評論

新郑市| 罗江县| 洛扎县| 文登市| 喜德县| 景宁| 永泰县| 安阳县| 卓资县| 古浪县| 安国市| 五华县| 宝山区| 西华县| 青河县| 平舆县| 三台县| 中西区| 霍山县| 会泽县| 陈巴尔虎旗| 苏尼特左旗| 崇州市| 保亭| 锡林浩特市| 衡山县| 亚东县| 广灵县| 平乐县| 嘉义市| 南充市| 成安县| 邢台县| 龙里县| 运城市| 阿拉尔市| 扶绥县| 怀化市| 静海县| 康马县| 营口市|