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

【數(shù)據(jù)結(jié)構(gòu)】利用順序棧/鏈棧完成表達(dá)式求值(C語(yǔ)言實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】利用順序棧/鏈棧完成表達(dá)式求值(C語(yǔ)言實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

利用順序棧完成表達(dá)式求值(將字符型轉(zhuǎn)換為整型)

程序代碼:

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#include <math.h>

#define MAXSIZE 100

#define ElemType char

#define LEN sizeof(ElemType)

typedef struct{

??? ElemType* data;

??? int top;

}SqStack;

void InitStack(SqStack* S)

{

??? S->data = (ElemType*)malloc(MAXSIZE * LEN);

??? if (S->data == NULL)

???????? exit(0);

??? S->top = 0;

}

int StackEmpty(SqStack* S) {

??? if (S->top == 0)

???????? return 1;

??? else

???????? return 0;

}

int StackFull(SqStack* S) {

??? if (S->top == MAXSIZE)

???????? return 1;

??? else

???????? return 0;

}

int Push(SqStack* S, ElemType x) {

??? if (StackFull(S))

???????? return 0;

??? S->data[S->top] = x;

??? (S->top)++;

??? return 1;

}

ElemType Pop(SqStack* S) {

??? ElemType x;

??? if (StackEmpty(S))

???????? return 0;

??? --(S->top);

??? x = S->data[S->top];

??? return x;

}

ElemType GetTop(SqStack* S) {

??? ElemType x;

??? if (StackEmpty(S))

???????? return 0;

??? x = S->data[(S->top) - 1];

??? return x;

}

int IfOptr(char c) {

??? switch (c) {

??? case '+':

??? case '-':

??? case '*':

??? case '/':

??? case '(':

??? case ')':

??? case '#':return 1;

??? default:return 0;

??? }

}

char Operate(ElemType a_c, ElemType op, ElemType b_c) {

??? int a = a_c - '0';

??? int b = b_c - '0';

??? switch (op) {

??? case '+': {int x = a + b;? return (x + 48); }

??? case '-': {int x = a - b;? return (x + 48); }

??? case '*': {int x = a * b;? return (x + 48); }

??? case '/': {int x = a / b;? return (x + 48); }

??? default:exit(1);

??? }

}

char Precede(char c1, char c2)

{

??? int c_temp1,c_temp2;

??? switch (c1)

??? {

??? case '*':

??? case '/':c_temp1 = 4; break;

??? case '+':

??? case '-':c_temp1 = 2; break;

??? case '(':c_temp1 = 0; break;

??? case ')':c_temp1 = 5; break;

??? case '#':c_temp1 = -1;

??? }

??? switch (c2)

??? {

??? case '*':

??? case '/': c_temp2 = 3; break;

??? case '+':

??? case '-': c_temp2 = 1; break;

??? case '(': c_temp2 = 5; break;

??? case ')': c_temp2 = 0; break;

??? case '#': c_temp2 = -1;

??? }

??? if (c_temp1<c_temp2)

???????? return('<');

??? else if(c_temp1==c_temp2)

???????? return('=');

??? else

???????? return('>');

}

int main() {

??? SqStack* OPTR= (SqStack*)malloc(sizeof(SqStack));

??? SqStack* OPND= (SqStack*)malloc(sizeof(SqStack));

??? char c;

??? InitStack(OPTR);

??? Push(OPTR, '#');

??? InitStack(OPND);

??? c = getchar();

??? while (c != '#' || GetTop(OPTR) != '#') {

???????? if (!IfOptr(c)) {

???????????? Push(OPND, c);

???????????? c = getchar();

???????? }

???????? else

???????????? switch (Precede(GetTop(OPTR),c)) {

???????????? case '<':

????????????????? Push(OPTR, c);

????????????????? c = getchar();

????????????????? break;

???????????? case '=':

???????????? {

????????????????? ElemType x = Pop(OPTR);

????????????????? c = getchar();

????????????????? break;

???????????? }

???????????? case? '>':

???????????? {

????????????????? ElemType op = Pop(OPTR);

????????????????? ElemType b = Pop(OPND);

????????????????? ElemType a = Pop(OPND);

????????????????? Push(OPND,Operate(a, op, b));

????????????????? break;

???????????? }

???????????? }

??? }

??? printf("%c",GetTop(OPND));

}

運(yùn)行截圖:

利用棧表達(dá)式求值c語(yǔ)言代碼,數(shù)據(jù)結(jié)構(gòu)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,算法

利用順序棧完成表達(dá)式求值(創(chuàng)建字符型、整型兩種棧)

程序代碼:

SqStackInt.h

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define MAXSIZE 100

typedef struct {

??? int* data;

??? int top;

}SqStackInt;

void InitStack_Int(SqStackInt* S)

{

??? S->data = (int*)malloc(MAXSIZE * sizeof(int));

??? if (S->data == NULL)

???????? exit(0);

??? S->top = 0;

}

int StackEmpty_Int(SqStackInt* S) {

??? if (S->top == 0)

???????? return 1;

??? else

???????? return 0;

}

int StackFull_Int(SqStackInt* S) {

??? if (S->top == MAXSIZE)

???????? return 1;

??? else

???????? return 0;

}

int Push_Int(SqStackInt* S, int x) {

??? if (StackFull_Int(S))

???????? return 0;

??? S->data[S->top] = x;

??? (S->top)++;

??? return 1;

}

int Pop_Int(SqStackInt* S) {

??? int x;

??? if (StackEmpty_Int(S))

???????? return 0;

??? --(S->top);

??? x = S->data[S->top];

??? return x;

}

int GetTop_Int(SqStackInt* S) {

??? int x;

??? if (StackEmpty_Int(S))

???????? return 0;

??? x = S->data[(S->top) - 1];

??? return x;

}

SqStackChar.h

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define MAXSIZE 100

typedef struct {

??? char* data;

??? int top;

}SqStackChar;

void InitStack_Char(SqStackChar* S)

{

??? S->data = (char*)malloc(MAXSIZE * sizeof(char));

??? if (S->data == NULL)

???????? exit(0);

??? S->top = 0;

}

int StackEmpty_Char(SqStackChar* S) {

??? if (S->top == 0)

???????? return 1;

??? else

???????? return 0;

}

int StackFull_Char(SqStackChar* S) {

??? if (S->top == MAXSIZE)

???????? return 1;

??? else

???????? return 0;

}

int Push_Char(SqStackChar* S, char x) {

??? if (StackFull_Char(S))

???????? return 0;

??? S->data[S->top] = x;

??? (S->top)++;

??? return 1;

}

char Pop_Char(SqStackChar* S) {

??? char x;

??? if (StackEmpty_Char(S))

???????? return 0;

??? --(S->top);

??? x = S->data[S->top];

??? return x;

}

char GetTop_Char(SqStackChar* S) {

??? char x;

??? if (StackEmpty_Char(S))

???????? return 0;

??? x = S->data[(S->top) - 1];

??? return x;

}

Main.cpp

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#include "SqStackChar.h"

#include "SqStackInt.h"

int IfOptr(char c) {

??? switch (c) {

??? case '+':

??? case '-':

??? case '*':

??? case '/':

??? case '(':

??? case ')':

??? case '#':return 1;

??? default:return 0;

??? }

}

char Operate( int a, char op, int b) {

??? switch (op) {

??? case '+': return (a + b);

??? case '-': return (a - b);

??? case '*': return (a * b);

??? case '/': return (a / b);

??? default:exit(1);

??? }

}

char Precede(char c1, char c2)

{

??? int c_temp1, c_temp2;

??? switch (c1)

??? {

??? case '*':

??? case '/':c_temp1 = 4; break;

??? case '+':

??? case '-':c_temp1 = 2; break;

??? case '(':c_temp1 = 0; break;

??? case ')':c_temp1 = 5; break;

??? case '#':c_temp1 = -1;

??? }

??? switch (c2)

??? {

??? case '*':

??? case '/': c_temp2 = 3; break;

??? case '+':

??? case '-': c_temp2 = 1; break;

??? case '(': c_temp2 = 5; break;

??? case ')': c_temp2 = 0; break;

??? case '#': c_temp2 = -1;

??? }

??? if (c_temp1 < c_temp2)

???????? return('<');

??? else if (c_temp1 == c_temp2)

???????? return('=');

??? else

???????? return('>');

}

int main() {

??? SqStackChar* OPTR = (SqStackChar*)malloc(sizeof(SqStackChar));

??? SqStackInt* OPND = (SqStackInt*)malloc(sizeof(SqStackInt));

??? char c;

??? InitStack_Char(OPTR);

??? Push_Char(OPTR, '#');

??? InitStack_Int(OPND);

??? c = getchar();

??? while (c != '#' || GetTop_Char(OPTR) != '#') {

???????? if (!IfOptr(c)) {

???????????? int n = c - '0';

???????????? Push_Int(OPND, n);

???????????? c = getchar();

???????? }

???????? else

???????????? switch (Precede(GetTop_Char(OPTR), c)) {

???????????? case '<':

????????????????? Push_Char(OPTR, c);

????????????????? c = getchar();

????????????????? break;

???????????? case '=':

???????????? {

????????????????? char x = Pop_Char(OPTR);

????????????????? c = getchar();

????????????????? break;

???????????? }

???????????? case? '>':

???????????? {

????????????????? char op = Pop_Char(OPTR);

????????????????? int b = Pop_Int(OPND);

????????????????? int a = Pop_Int(OPND);

????????????????? Push_Int(OPND, Operate(a, op, b));

????????????????? break;

???????????? }

???????????? }

??? }

??? printf("%d", GetTop_Int(OPND));

}

運(yùn)行截圖:

利用棧表達(dá)式求值c語(yǔ)言代碼,數(shù)據(jù)結(jié)構(gòu)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,算法

利用鏈棧完成表達(dá)式求值(創(chuàng)建字符型、整型兩種棧)

程序代碼:

LinkStackInt.h

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

typedef struct StackNodeInt {

??? int data;

??? struct StackNodeInt* link;

}StackNodeInt;

StackNodeInt* InitStack_Int() {

??? StackNodeInt* top = (StackNodeInt*)malloc(sizeof(StackNodeInt));

??? if (top == NULL) {

???????? printf("動(dòng)態(tài)空間分配失?。?);

???????? exit(-1);

??? }

??? top->link = NULL;

??? return(top);

}

int StackEmpty_Int(StackNodeInt* top) {

??? if (top->link == NULL)

???????? return 1;

??? else

???????? return 0;

}

void Push_Int(StackNodeInt* top, int x) {

??? StackNodeInt* p = (StackNodeInt*)malloc(sizeof(StackNodeInt));

??? if (p == NULL) {

???????? printf("動(dòng)態(tài)空間分配失?。?);

???????? exit(-1);

??? }

??? p->link = top->link;

??? p->data = x;

??? top->link = p;

}

int Pop_Int(StackNodeInt* top) {

??? if (StackEmpty_Int(top)) { exit(-1); }

??? StackNodeInt* p;

??? p = top->link;

??? int x = p->data;

??? top->link = p->link;

??? free(p);

??? return x;

}

int GetTop_Int(StackNodeInt* top) {

??? if (StackEmpty_Int(top)) { return 0; }

??? int x = top->link->data;

??? return x;

}

LinkStackChar.h

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

typedef struct StackNodeChar {

??? char data;

??? struct StackNodeChar* link;

}StackNodeChar;

StackNodeChar* InitStack_Char() {

??? StackNodeChar* top= (StackNodeChar*)malloc(sizeof(StackNodeChar));

??? if (top == NULL) {

???????? printf("動(dòng)態(tài)空間分配失??!");

???????? exit(-1);

??? }

??? top->link = NULL;

??? return(top);

}

int StackEmpty_Char(StackNodeChar* top) {

??? if (top->link == NULL)

???????? return 1;

??? else

???????? return 0;

}

void Push_Char(StackNodeChar* top,char x) {

??? StackNodeChar* p = (StackNodeChar*)malloc(sizeof(StackNodeChar));

??? if (p == NULL) {

???????? printf("動(dòng)態(tài)空間分配失??!");

???????? exit(-1);

??? }

??? p->link = top->link;

??? p->data = x;

??? top->link = p;

}

char Pop_Char(StackNodeChar* top) {

??? if (StackEmpty_Char(top)) { exit(-1); }

??? StackNodeChar* p;

??? p = top->link;

??? char x = p->data;

??? top->link = p->link;

??? free(p);

??? return x;

}

char GetTop_Char(StackNodeChar* top) {

??? if (StackEmpty_Char(top)) { return 0; }

??? char x = top->link->data;

??? return x;

}

Main.cpp

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#include "LinkStackChar.h"

#include "LinkStackInt.h"

int IfOptr(char c) {

??? switch (c) {

??? case '+':

??? case '-':

??? case '*':

??? case '/':

??? case '(':

??? case ')':

??? case '#':return 1;

??? default:return 0;

??? }

}

char Operate(int a, char op, int b) {

??? switch (op) {

??? case '+': return (a + b);

??? case '-': return (a - b);

??? case '*': return (a * b);

??? case '/': return (a / b);

??? default:exit(1);

??? }

}

char Precede(char c1, char c2)

{

??? int c_temp1, c_temp2;

??? switch (c1)

??? {

??? case '*':

??? case '/':c_temp1 = 4; break;

??? case '+':

??? case '-':c_temp1 = 2; break;

??? case '(':c_temp1 = 0; break;

??? case ')':c_temp1 = 5; break;

??? case '#':c_temp1 = -1;

??? }

??? switch (c2)

??? {

??? case '*':

??? case '/': c_temp2 = 3; break;

??? case '+':

??? case '-': c_temp2 = 1; break;

??? case '(': c_temp2 = 5; break;

??? case ')': c_temp2 = 0; break;

??? case '#': c_temp2 = -1;

??? }

??? if (c_temp1 < c_temp2)

???????? return('<');

??? else if (c_temp1 == c_temp2)

???????? return('=');

??? else

???????? return('>');

}

int main() {

??? char c;

??? StackNodeChar* OPTR = InitStack_Char();

??? Push_Char(OPTR, '#');

??? StackNodeInt* OPND=InitStack_Int();

??? c = getchar();

??? while (c != '#' || GetTop_Char(OPTR) != '#') {

???????? if (!IfOptr(c)) {

???????????? int n = c - '0';

???????????? Push_Int(OPND, n);

???????????? c = getchar();

???????? }

???????? else

???????????? switch (Precede(GetTop_Char(OPTR), c)) {

???????????? case '<':

????????????????? Push_Char(OPTR, c);

????????????????? c = getchar();

????????????????? break;

???????????? case '=':

???????????? {

????????????????? char x = Pop_Char(OPTR);

????????????????? c = getchar();

????????????????? break;

???????????? }

???????????? case? '>':

???????????? {

????????????????? char op = Pop_Char(OPTR);

????????????????? int b = Pop_Int(OPND);

????????????????? int a = Pop_Int(OPND);

????????????????? Push_Int(OPND, Operate(a, op, b));

????????????????? break;

???????????? }

???????????? }

??? }

??? printf("%d", GetTop_Int(OPND));

}

運(yùn)行截圖:

利用棧表達(dá)式求值c語(yǔ)言代碼,數(shù)據(jù)結(jié)構(gòu)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu),c語(yǔ)言,算法

實(shí)驗(yàn)小結(jié)

① 了解掌握整型數(shù)據(jù)與字符型的轉(zhuǎn)化規(guī)則

在“利用順序棧完成表達(dá)式求值(將字符型轉(zhuǎn)換為整型)”實(shí)驗(yàn)中,因?yàn)槲抑粍?chuàng)建了字符棧,所以只能將數(shù)據(jù)作為字符存放在字符棧中,而作為字符型數(shù)據(jù)存儲(chǔ)的數(shù)字不能計(jì)算出正確結(jié)果,所以必須在計(jì)算前,將作為字符存放的數(shù)字轉(zhuǎn)換為整型數(shù)據(jù)。那如何轉(zhuǎn)換呢?舉個(gè)例子: ‘1’的ASCII 值為 49;‘0’的ASCII 值為 48;‘1’-‘0’=1;‘0’是一個(gè)char類型的字符,其ASCII碼就是一個(gè)int型的數(shù)字48,在運(yùn)算過程中等同于int。所以將字符型數(shù)字‘1’轉(zhuǎn)化為 整型數(shù)字1:‘1’-‘0’=1相當(dāng)于49-48 = 1。

② 時(shí)刻警惕“野指針”

在程序編寫完成后,調(diào)試過程中卻不斷報(bào)錯(cuò):“C4700:使用了未初始化的局部變量‘OPTR’和‘OPRD’”,在查閱資料并多番詢問后。最終找出錯(cuò)誤:缺少如下代碼:

SqStack* OPTR = (SqStack*)malloc(sizeof(SqStack));

SqStack* OPND = (SqStack*)malloc(sizeof(SqStack));

換言之,我在初始化OPTR和OPND兩個(gè)順序棧的指針時(shí),沒有給指針分配地址空間,而讓他們成為“野指針”。我一直存在一個(gè)思維誤區(qū):我需要開辟空間給棧存放數(shù)據(jù),并將棧的地址返回給它的指針,也就是OPTR和OPTD。存放數(shù)據(jù)固然要開辟空間,但是存放這些數(shù)據(jù)的地址也同樣要開辟空間。我就是因?yàn)闆]有給棧的地址開辟空間存放而報(bào)錯(cuò)。之后的編程,要時(shí)刻警惕野指針的存在。

③ 自定義頭文件

如果在一個(gè)文件中,寫上成百上千行的代碼,這些代碼閱讀起來(lái)就會(huì)很麻煩。因此,我們可以引入頭文件,把自己寫的函數(shù)放入頭文件中,然后直接調(diào)用到主程序中,這樣在主程序中看起來(lái)就比較清晰。本次實(shí)驗(yàn),我將棧的定義及其相關(guān)操作單獨(dú)放在一個(gè)頭文件中,并在主程序的頭部調(diào)用,這樣主程序就只剩下與計(jì)算相關(guān)的函數(shù),整個(gè)程序脈絡(luò)更為清晰,可讀性更高。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-745519.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】利用順序棧/鏈棧完成表達(dá)式求值(C語(yǔ)言實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】鏈棧的基本操作(C語(yǔ)言)

    零零總總搜索了一些關(guān)于鏈棧的資料,了解了鏈棧的基本操作,一直覺得別人寫的代碼或多或少存在一些問題,所以打算自己寫一篇關(guān)于鏈棧的文章,也算是對(duì)所學(xué)知識(shí)的梳理和鞏固了。 首先說(shuō)明本文使用C語(yǔ)言進(jìn)行鏈棧的基本操作,鏈棧是無(wú)頭結(jié)點(diǎn)的。這里補(bǔ)充說(shuō)明一下,

    2024年02月05日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】 鏈棧的基本操作 (C語(yǔ)言版)

    【數(shù)據(jù)結(jié)構(gòu)】 鏈棧的基本操作 (C語(yǔ)言版)

    目錄 一、鏈棧 1、鏈棧的定義: 2、鏈棧的優(yōu)缺點(diǎn): 二、鏈棧的基本操作算法(C語(yǔ)言)???? 1、宏定義 ??2、創(chuàng)建結(jié)構(gòu)體 3、鏈棧的初始化? ?4、鏈棧的進(jìn)棧 5、鏈棧的出棧 6、獲取棧頂元素 7、棧的遍歷輸出 8、鏈棧的判空 ?9、求鏈棧的棧長(zhǎng) 10、鏈棧的清空 11、鏈棧的銷毀

    2024年01月24日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】?!蚕?xiàng)?、鏈棧(入?出棧 判空 創(chuàng)建 讀棧頂元素)完整代碼

    只允許在一端進(jìn)行插入操作或刪除的線性表。 重要術(shù)語(yǔ) 棧頂:允許 插入和刪除的一端。 棧底:不允許 插入刪除的一端。 空棧:不含任何元素的空表。 出棧順序(卡特蘭數(shù)): n個(gè)不同元素進(jìn)棧,出棧元素不同排列的個(gè)數(shù): 1 n + 1 C 2 n n frac{1}{n+1} quad C_{2n}^n n + 1 1 ? C 2 n n ?

    2024年02月11日
    瀏覽(21)
  • 探索樹形數(shù)據(jù)結(jié)構(gòu),通識(shí)樹、森林與二叉樹的基礎(chǔ)知識(shí)(專有名詞),進(jìn)一步利用順序表和鏈表表示、遍歷和線索樹形結(jié)構(gòu)

    探索樹形數(shù)據(jù)結(jié)構(gòu),通識(shí)樹、森林與二叉樹的基礎(chǔ)知識(shí)(專有名詞),進(jìn)一步利用順序表和鏈表表示、遍歷和線索樹形結(jié)構(gòu)

    ? 結(jié)點(diǎn)之間有分支,具有層次關(guān)系 樹的定義 : 樹 (tree)是n(n≥0)個(gè)有限集。 若n = 0,則稱為空樹; 若n 0,則它滿足如下兩個(gè)條件: 有且僅有一個(gè)特定的稱為根(Root)的結(jié)點(diǎn); 其余結(jié)點(diǎn)可分為m(m≥0)個(gè)互不相交的有限集T1,T2,T3,.....,Tm,其中每一個(gè)集合本身又是一棵樹,并稱為根的

    2024年02月01日
    瀏覽(100)
  • 數(shù)據(jù)結(jié)構(gòu):線性表順序存儲(chǔ)結(jié)構(gòu)———順序表

    目錄 順序表的定義 初始化線性表 銷毀線性表 求線性表的長(zhǎng)度 判斷是否為空表 插入數(shù)據(jù)元素 邏輯序號(hào)與物理序號(hào)的區(qū)別 刪除數(shù)據(jù)元素 輸出線性表 ?按序號(hào)求線性表中的元素 按元素值查找 整體上創(chuàng)建順序表 順序表實(shí)驗(yàn) 線性表的順序存儲(chǔ)是把線性表中的所有元素按照其邏輯

    2024年02月03日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)->順序表實(shí)戰(zhàn)指南,(手把手教會(huì)你拿捏數(shù)據(jù)結(jié)構(gòu)順序表)

    數(shù)據(jù)結(jié)構(gòu)->順序表實(shí)戰(zhàn)指南,(手把手教會(huì)你拿捏數(shù)據(jù)結(jié)構(gòu)順序表)

    文章目錄 ?作者簡(jiǎn)介:大家好,我是橘橙黃又青,一個(gè)想要與大家共同進(jìn)步的男人???? ??個(gè)人主頁(yè):橘橙黃又青-CSDN博客 今天開始我們正式進(jìn)入數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)了,這篇簡(jiǎn)單了解一下: 線性表的存儲(chǔ)結(jié)構(gòu):順序存儲(chǔ)結(jié)構(gòu)、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu); 順序表的定義:用一段物理地址連

    2024年01月25日
    瀏覽(93)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹——順序結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹——順序結(jié)構(gòu)

    由于每個(gè)節(jié)點(diǎn)都 只有一個(gè)父節(jié)點(diǎn) ,所以我們可通過雙親來(lái)表示一棵樹。具體方式通過 數(shù)組的形式 實(shí)現(xiàn)。 根節(jié)點(diǎn)的下標(biāo)為0 按照層序從上到下排序 每層從左向右遞增 表示形式: 二維數(shù)組 數(shù)據(jù)的列標(biāo)為0 ,只需確定行標(biāo),即可鎖定位置 根節(jié)點(diǎn)的父節(jié)點(diǎn)下標(biāo)為 -1 列標(biāo)為1存父節(jié)

    2024年02月02日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)之表達(dá)式求值

    數(shù)據(jù)結(jié)構(gòu)之表達(dá)式求值

    ?前言 運(yùn)用堆棧解決表達(dá)式的求值,代碼思路為: 1.定義兩個(gè)棧,一個(gè)char類型的棧用于存放運(yùn)算符(ysf)一個(gè)int類型的棧用于存放操作數(shù)(czs) 如一個(gè)表達(dá)式3+6*9,將“+”,“*”入ysf棧,將“3”“6”“9”入czs棧 2.運(yùn)用getchar進(jìn)行數(shù)據(jù)的錄入,如果接收的是運(yùn)算符,將其插入到運(yùn)

    2024年04月29日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)(順序結(jié)構(gòu)、鏈?zhǔn)浇Y(jié)構(gòu)、索引結(jié)構(gòu)、散列結(jié)構(gòu))

    數(shù)據(jù)結(jié)構(gòu)(順序結(jié)構(gòu)、鏈?zhǔn)浇Y(jié)構(gòu)、索引結(jié)構(gòu)、散列結(jié)構(gòu))

    數(shù)據(jù)結(jié)構(gòu),就是一種程序設(shè)計(jì)優(yōu)化的方法論,研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算, 目的是加快程序的執(zhí)行速度、減少內(nèi)存占用的空間 。 數(shù)據(jù)的邏輯結(jié)構(gòu)指反映數(shù)據(jù)元素之間的邏輯關(guān)系,而與數(shù)據(jù)的存儲(chǔ)無(wú)關(guān),是獨(dú)立于計(jì)算

    2024年02月03日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)與算法——順序表(順序存儲(chǔ)結(jié)構(gòu))及初始化詳解

    數(shù)據(jù)結(jié)構(gòu)與算法——順序表(順序存儲(chǔ)結(jié)構(gòu))及初始化詳解

    順序表 ,全名 順序存儲(chǔ)結(jié)構(gòu) ,是線性表的一種。通過《什么是線性表》一節(jié)的學(xué)習(xí)我們知道,線性表用于存儲(chǔ)邏輯關(guān)系為“一對(duì)一”的數(shù)據(jù),順序表自然也不例外。 不僅如此,順序表對(duì)數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu)也有要求。 順序表存儲(chǔ)數(shù)據(jù)時(shí),會(huì)提前申請(qǐng)一整塊足夠大小的物理

    2024年02月16日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包