中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎么實現順序棧

發布時間:2022-04-22 15:13:34 來源:億速云 閱讀:136 作者:iii 欄目:開發技術

本篇內容主要講解“C語言怎么實現順序棧”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言怎么實現順序棧”吧!

順序棧的定義

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

順序棧的理解

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

準備工作

1.宏定義及其重命名

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

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

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

具體實現

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的元素個數,即棧的長度 */
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;
}

主函數

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語言怎么實現順序棧”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舒城县| 睢宁县| 闸北区| 阳江市| 蓬溪县| 万载县| 凉城县| 渭南市| 广东省| 巴林左旗| 贵州省| 凤台县| 彭阳县| 无棣县| 莫力| 嘉善县| 象州县| 和政县| 阳泉市| 绥芬河市| 德州市| 淳化县| 澄江县| 庆城县| 安西县| 梁平县| 岳阳县| 青岛市| 诏安县| 龙江县| 灵石县| 吉隆县| 庆云县| 二连浩特市| 云林县| 岑溪市| 农安县| 安乡县| 阿拉尔市| 古田县| 霞浦县|