国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結構之棧的基本操作

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結構之棧的基本操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

該順序棧涉及到了存儲整型數(shù)據(jù)的順序棧還有存儲字符型數(shù)據(jù)的順序棧
實現(xiàn)的功能有:入棧、出棧、判斷是否為空棧、求棧的長度、清空棧、銷毀棧、得到棧頂元素
此外根據(jù)上述功能,編寫了數(shù)值轉換(十進制轉化八進制)方法、括號匹配方法。

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
#include<iostream>
using namespace std;
#define  STACK_INIT_SIZE  100
#define  STACKINCREMENT  10
#define OK 1
#define TRUE 1
#define FALSE 0
#define OVERFLOW 0
#define ERROR 0
 
typedef int Status;
typedef char SChar;
typedef int SElemType;
 
//定義棧,棧中存儲的數(shù)據(jù)為整型數(shù)據(jù) 
typedef  struct
{
    SElemType* base;     //棧底指針
    SElemType* top;      //棧頂指針
    int  stacksize;            //當前已分配的存儲空間
}SqStackInt, * SqslinkInt;      //順序棧說明符
 
//定義棧,棧中存儲的數(shù)據(jù)為字符型數(shù)據(jù) 
typedef  struct
{
    SChar* base;     //棧底指針
    SChar* top;      //棧頂指針
    int  stacksize;            //當前已分配的存儲空間
}SqStackChar, * SqslinkChar;      //順序棧說明符
 
 
//下面為 “棧中存儲的數(shù)據(jù)為整型數(shù)據(jù) ”的基本操作 
Status InitStackInt(SqStackInt& S) {
    //分配內存空間
    S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if (!S.base)exit(OVERFLOW);//分配失敗
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;//順序棧最大的長度
    return OK;
}
//求順序棧(整形數(shù)據(jù))的長度
Status StackIntList(SqStackInt& S) {
    int list = (S.top - S.base);//棧的頭指針減去尾指針就是長度
    printf("該順序棧的長度為:%5d\n", list);
    return OK;
}
//清空順序棧(整形數(shù)據(jù))
Status ClearStackInt(SqStackInt& S) {
    S.top = S.base;
    printf("該整形順序棧已經(jīng)清空!");
    return OK;
}
//判斷順序棧(整形數(shù)據(jù))是否為空棧
Status StackEmptyInt(SqStackInt S) {
    if (S.base == S.top) {
        printf("該整形順序棧是空棧!");
        return TRUE;
    }
    else return FALSE;
}
//在順序棧(整形數(shù)據(jù))中得到棧頂元素
SElemType GetTop(SqStackInt& S, SElemType& e) {
    if (S.top == S.base) {
        return ERROR;
    }
    e = *(S.top - 1);//取出棧頂元素
    return OK;
}
//在順序棧(整形數(shù)據(jù))中進棧
Status PushInt(SqStackInt& S, SElemType e) {
    //判斷棧是不是滿了,如果滿了就增加內存空間
    if (S.top - S.base >= S.stacksize) {
        S.base = (SElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
        if (!S.base) exit(OVERFLOW);//realloc失敗了
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return OK;
 
}
//在順序棧(整形數(shù)據(jù))中出棧
Status PopInt(SqStackInt& S, SElemType& e) {
    if (S.top == S.base) return ERROR;
    e = *--S.top;
   // printf("出棧的元素:%5d\n", e);
    int numer = e;
    return numer;
}
//銷毀順序棧(整形數(shù)據(jù))
Status DestroyStackInt(SqStackInt& S) {
    S.stacksize = 0;//銷毀后棧的長度為零
    S.top = S.base;
    free(S.base);//釋放棧底
    S.top = S.base = NULL;
    printf("該順序棧已被銷毀");
    return OK;
}
 
 
//下面為 “棧中存儲的數(shù)據(jù)為字符型數(shù)據(jù) ”的基本操作 
Status InitStackChar(SqStackChar& S) {
    S.base = (SChar*)malloc(STACK_INIT_SIZE * sizeof(SChar));
    if (!S.base)exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return OK;
}
 
Status ClearStackChar(SqStackChar& S) {
    S.top = S.base;
    return OK;
}
 
Status StackEmptyChar(SqStackChar S) {
    if (S.base == S.top) return TRUE;
    else return FALSE;
}
 
SChar GetTopChar(SqStackChar& S) {
    SChar e;
    if (S.top == S.base) return ERROR;
    e = *(S.top - 1);
    return e;
}
 
Status PushChar(SqStackChar& S, SChar e) {
    if (S.top - S.base >= S.stacksize) {
        S.base = (SChar*)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SChar));
        if (!S.base) exit(OVERFLOW);
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
 
    return OK;
}
 
SChar  PopChar(SqStackChar& S, SChar& e) {
    if (S.top == S.base) return ERROR;
    e = *--S.top;
    char data = e;
    return data;
}
 
 
Status DestroyStackChar(SqStackChar& S) {
    free(S.base);
    return OK;
}
 
//數(shù)制轉換算法 
void conversion() {
    SqStackInt S;
    InitStackInt(S);
    int N;
    printf("請輸入一個數(shù):");
    scanf("%d", &N);
    while (N) {
        PushInt(S, N % 8);//如果N÷8的余數(shù)不為零就進棧
        N = N / 8;
    }
    SElemType e;
    while (!StackEmptyInt(S)) {
        PopInt(S, e);//所有余數(shù)出棧
        printf("%d", e);
    }
 
} // conversion
 
//括號匹配算法
Status  Matching()
{
    SqStackChar S;
    InitStackChar(S);
    int i =0; 
    char x; 
    ClearStackChar(S);
    SChar E[100];
    printf("請輸入一組括號(以#結束):");
    scanf("%s", &E);
    printf("你輸入的是:%s\n", E);
    while (E[i] != '#')
    {
        if (E[i] == '(' || E[i] == '[') {
            PushChar(S, E[i]);   //(,[ 進棧
        }
        if (E[i] ==')' || E[i] == ']')
        {
            if (StackEmptyChar(S)) {
                return(ERROR);
            }//不匹配,返回0
            else {
                x = PopChar(S, E[i]);  //出棧,x為相應左括號
                if (x == '(' && E[i] == ']' || x == '[' && E[i] == ')') {                  
                    return(ERROR);
                }
            }    //不匹配返回0
        }
        i++;
       
    }
    if (StackEmptyChar(S))  return(OK);   //括號匹配,返回1
    else return(ERROR);  //不匹配返回0
 
}  //Matching
 
 
int main()
{
    SqStackInt int_S;
    InitStackInt(int_S);//初始化棧
    SElemType enterData_Int;//定義進棧的元素變量,對其賦值
    SElemType outData_Int;//元素出棧用此接受
    int n;//后面要進行的操做數(shù),可以對其賦值
    SElemType e;//定義得到棧頂元素的變量
    int result;
    while (1)
    {
        printf("\n\n\n");
        printf("請從下面菜單中選擇要操作的項:\n");
        printf("1、數(shù)制轉換(十進制轉換八進制)\n");
        printf("2、括號匹配\n");
        printf("3、整形數(shù)據(jù)元素進棧\n");
        printf("4、整形數(shù)據(jù)元素出棧\n");
        printf("5、求整形順序棧的長度\n");
        printf("6、清空整形順序棧\n");
        printf("7、銷毀整形順序棧\n");
        printf("8、判斷整形順序棧是否為空棧\n");
        printf("9、得到整形順序棧的棧頂元素\n");
        printf("0、退出\n");
        printf("請輸入1-9的數(shù)或者輸入0結束程序:\n");
        scanf("%d", &n);
        switch (n) {
        case 1:
            conversion();
            break;
        case 2:
            result = Matching();
            if (result == OK)
                printf("括號匹配成功\n");
            else
                printf("括號匹配不成功\n");
            break;
        case 3:
            printf("請輸入要進棧的整形數(shù)據(jù)元素:\n");
            scanf("%d", &enterData_Int);
            PushInt(int_S, enterData_Int);
            break;
        case 4:
           /* scanf("%d", &eOut);*/
            int num ;
            num= PopInt(int_S, outData_Int);
            printf("出棧的元素是:%5d\n", num);
           
            break;
        case 5:
            StackIntList(int_S);
            break;
        case 6:
            ClearStackInt(int_S);
            break;
        case 7:
            DestroyStackInt(int_S);
            break;
        case 8:
            StackEmptyInt(int_S);
            break;
        case 9:
            GetTop(int_S,e);
            break;
        case 0:
            exit(0);
            break;
        default:printf("輸入數(shù)值錯誤,請重新輸入\n"); break;
        }
    }
    return OK;
}

控制臺界面展示:
數(shù)據(jù)結構之棧的基本操作,數(shù)據(jù)結構學習,數(shù)據(jù)結構

進棧展示,以進棧三個整形數(shù)據(jù)元素為例:
數(shù)據(jù)結構之棧的基本操作,數(shù)據(jù)結構學習,數(shù)據(jù)結構

出棧展示:

數(shù)據(jù)結構之棧的基本操作,數(shù)據(jù)結構學習,數(shù)據(jù)結構

數(shù)值轉換演示,86(十進制數(shù))——>126(八進制):
數(shù)據(jù)結構之棧的基本操作,數(shù)據(jù)結構學習,數(shù)據(jù)結構

括號匹配演示:
數(shù)據(jù)結構之棧的基本操作,數(shù)據(jù)結構學習,數(shù)據(jù)結構文章來源地址http://www.zghlxwxcb.cn/news/detail-818821.html

到了這里,關于數(shù)據(jù)結構之棧的基本操作的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【數(shù)據(jù)結構】棧和隊列(棧的基本操作和基礎知識)

    【數(shù)據(jù)結構】棧和隊列(棧的基本操作和基礎知識)

    ??個人主頁: 秦jh__ https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 ???系列專欄: 《數(shù)據(jù)結構》 https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 目錄 ?前言 棧 棧的概念和結構 棧的實現(xiàn) ?編輯 數(shù)組棧的實現(xiàn) 總的聲明 初始化 ?插入 刪除 取棧頂元素 銷毀 判斷是否為空

    2024年02月03日
    瀏覽(20)
  • 【數(shù)據(jù)結構】順序棧的基本操作:出棧、入棧、取棧頂元素、輸出所有棧中元素、括號匹配題目

    【數(shù)據(jù)結構】順序棧的基本操作:出棧、入棧、取棧頂元素、輸出所有棧中元素、括號匹配題目

    棧是限定僅在表位進行插入或刪除操作的線性表。棧的表尾稱為棧頂,表頭稱為棧底。不含元素的棧稱為空棧。 左圖為棧的示意圖,右圖為用鐵路調度表示棧。 如下是入棧至棧滿再進行出棧的過程示意圖。值得注意的是,棧滿后,top指針指向的不是頂端元素,而是頂端的下

    2024年02月07日
    瀏覽(26)
  • 數(shù)據(jù)結構:使用順序棧的基本操作,實現(xiàn)十進制轉為二進制,十六進制的轉換

    使用系統(tǒng)環(huán)境: 1:win10,使用工具dev 2:使用系統(tǒng)win10 3:參考書籍數(shù)據(jù)結構(C語言版——嚴蔚敏 吳偉民) ( 注意:此文章默認,學習者擁有一定的數(shù)據(jù)機構棧,C語言的知識,書籍第20頁,2.1算法的代碼進行一個簡化。)

    2024年02月05日
    瀏覽(28)
  • 【數(shù)據(jù)結構】順序棧和鏈棧的基本操作(定義,初始化, 入棧,出棧,取棧頂元素,遍歷,置空)

    【數(shù)據(jù)結構】順序棧和鏈棧的基本操作(定義,初始化, 入棧,出棧,取棧頂元素,遍歷,置空)

    ??專欄【數(shù)據(jù)結構】 ??喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。 ??音樂分享【勛章】 大一同學小吉,歡迎并且感謝大家指出我的問題?? ? 目錄 ?棧的分類 ?順序棧 ??優(yōu)點: ??缺點: ?鏈棧 ??優(yōu)點: ??缺點: ?基本概念 ?棧: ?棧頂: ?棧頂: ?圖片理

    2023年04月22日
    瀏覽(24)
  • 數(shù)據(jù)結構之棧的實現(xiàn)(附源碼)

    數(shù)據(jù)結構之棧的實現(xiàn)(附源碼)

    目錄 一、棧的概念及結構 ?二、棧的實現(xiàn) 三、初學棧的練習題 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數(shù)據(jù)插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數(shù)據(jù)元素遵守后進先出LIFO(Last In First Out)的原則。 壓棧:棧的插

    2024年02月07日
    瀏覽(24)
  • 初階數(shù)據(jù)結構之棧的實現(xiàn)(五)

    初階數(shù)據(jù)結構之棧的實現(xiàn)(五)

    ??作者簡介:M malloc,致力于成為嵌入式大牛的男人 ??專欄簡介:本文收錄于 初階數(shù)據(jù)結構 ,本專欄主要內容講述了初階的數(shù)據(jù)結構,如順序表,鏈表,棧,隊列等等,專為小白打造的文章專欄。 ??相關專欄推薦:LeetCode刷題集,C語言每日一題。 本章我將詳細的講解關于

    2024年02月07日
    瀏覽(26)
  • 【數(shù)據(jù)結構】圖的基本操作

    【數(shù)據(jù)結構】圖的基本操作

    一、問題描述 分別以鄰接矩陣和鄰接表作為存儲結構,實現(xiàn)以下圖的基本操作: 增加一個新結點v,Insert(G,v); 刪除頂點v及其相關的邊,Delete(G,v); 增加一條邊v,w,Insert(G,v,w); 刪除一條邊v,w,Delete(G,v,w); 二、設計思路 1、鄰接矩陣實現(xiàn): ????????鄰接矩陣實現(xiàn)圖的基本

    2024年02月06日
    瀏覽(21)
  • 數(shù)據(jù)結構--串的基本操作

    數(shù)據(jù)結構--串的基本操作

    第五話 數(shù)據(jù)結構之串 文章目錄 一、了解什么是串 二、串的基本特征 三、串的基本操作 串的初始化 串的輸出? 四、串的匹配模式 五、總結 串(即字符串)是一種特殊的線性表,在信息檢索、文本編輯等領域有廣泛的應用。其特殊性體現(xiàn)在組成線性表的每個數(shù)據(jù)元素是單個

    2023年04月17日
    瀏覽(31)
  • 數(shù)據(jù)結構--圖的基本操作

    數(shù)據(jù)結構--圖的基本操作

    使用的存儲模式: 圖的基本操作: ? Adjacent(G,x,y):判斷圖G是否存在邊x, y或(x, y)。 ? Neighbors(G,x):列出圖G中與結點x鄰接的邊。 ? InsertVertex(G,x):在圖G中插入頂點x。 ? DeleteVertex(G,x):從圖G中刪除頂點x。 ? AddEdge(G,x,y):若無向邊(x, y)或有向邊x, y不存在,則向圖G中添加該

    2024年02月16日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包