1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. C語言數(shù)據(jù)結(jié)構(gòu)中棧操作實(shí)驗(yàn)

        時(shí)間:2020-09-18 15:35:35 計(jì)算機(jī)應(yīng)用 我要投稿

        C語言數(shù)據(jù)結(jié)構(gòu)中棧操作實(shí)驗(yàn)

          導(dǎo)語:語言中棧是一種數(shù)據(jù)結(jié)構(gòu),后進(jìn)先出,即最后進(jìn)入棧的數(shù)據(jù)最先彈出。下面就由小編為大家介紹一下C語言數(shù)據(jù)結(jié)構(gòu)中棧操作實(shí)驗(yàn),希望對大家有所幫助!

          實(shí)驗(yàn):

          編寫一個(gè)程序?qū)崿F(xiàn)順序棧的各種基本運(yùn)算,并在此基礎(chǔ)上設(shè)計(jì)一個(gè)主程序,完成如下功能:

         。1)初始化順序棧

         。2)插入元素

          (3)刪除棧頂元素

         。4)取棧頂元素

          (5)遍歷順序棧

         。6)置空順序棧

          分析:

          棧的順序存儲(chǔ)結(jié)構(gòu)簡稱為順序棧,它是運(yùn)算受限的順序表。

          對于順序棧,入棧時(shí),首先判斷棧是否為滿,棧滿的條件為:p->top= =MAXNUM-1,棧滿時(shí),不能入棧; 否則出現(xiàn)空間溢出,引起錯(cuò)誤,這種現(xiàn)象稱為上溢。

          出棧和讀棧頂元素操作,先判棧是否為空,為空時(shí)不能操作,否則產(chǎn)生錯(cuò)誤。通常?兆鳛橐环N控制轉(zhuǎn)移的條件。

          注意:

         。1)順序棧中元素用向量存放

         。2)棧底位置是固定不變的.,可設(shè)置在向量兩端的任意一個(gè)端點(diǎn)

         。3)棧頂位置是隨著進(jìn)棧和退棧操作而變化的,用一個(gè)整型量top(通常稱top為棧頂指針)來指示當(dāng)前棧頂位置

          順序棧的實(shí)現(xiàn):

          #include

          #include

          typedef int SElemType;

          typedef int Status;

          #define INIT_SIZE 100

          #define STACKINCREMENT 10

          #define Ok 1

          #define Error 0

          #define True 1

          #define False 0

          typedef struct

          {

          SElemType *base;

          SElemType *top;

          int stacksize;

          }SqStack;

          //初始化棧

          Status InitStack(SqStack *s)

          {

          s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType));

          if(!s->base)

          {

          puts("存儲(chǔ)空間分配失敗!");

          return Error;

          }

          s->top = s->base;

          s->stacksize = INIT_SIZE;

          return Ok;

          }

          //清空棧

          Status ClearStack(SqStack *s)

          {

          s->top = s->base;

          return Ok;

          }

          //棧是否為空

          Status StackEmpty(SqStack *s)

          {

          if(s->top == s->base)

          return True;

          else

          return False;

          }

          //銷毀棧

          Status Destroy(SqStack *s)

          {

          free(s->base);

          s->base = NULL;

          s->top = NULL;

          s->stacksize=0;

          return Ok;

          }

          //獲得棧頂元素

          Status GetTop(SqStack *s, SElemType &e)

          {

          if(s->top == s->base) return Error;

          e = *(s->top - 1);

          return Ok;

          }

          //壓棧

          Status Push(SqStack *s, SElemType e)

          {

          if(s->top - s->base >= s->stacksize)//棧滿

          {

          s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType));

          if(!s->base)

          {

          puts("存儲(chǔ)空間分配失。");

          return Error;

          }

          s->top = s->base + s->stacksize;//修改棧頂位置

          s->stacksize += STACKINCREMENT;//修改棧長度

          }

          *s->top++ = e;

          return Ok;

          }

          //彈棧

          Status Pop(SqStack *s, SElemType *e)

          {

          if(s->top == s->base) return Error;

          --s->top;

          *e = *(s->top);

          return Ok;

          }

          //遍歷棧

          Status StackTraverse(SqStack *s,Status(*visit)(SElemType))

          {

          SElemType *b = s->base;//此處不能直接用base或top移動(dòng),即不能改變原棧的結(jié)構(gòu)

          SElemType *t = s->top;

          while(t > b)

          visit(*b++);

          printf("");

          return Ok;

          }

          Status visit(SElemType c)

          {

          printf("%d ",c);

          return Ok;

          }

          測試代碼:

          int main()

          {

          SqStack a;

          SqStack *s = &a;

          SElemType e;

          InitStack(s);

          int n;

          puts("請輸入要進(jìn)棧的個(gè)數(shù):");

          scanf("%d", &n);

          while(n--)

          {

          int m;

          scanf("%d", &m);

          Push(s, m);

          }

          StackTraverse(s, visit);

          puts("");

          puts("8進(jìn)棧后:");

          Push(s, 8);

          StackTraverse(s, visit);

          puts("");

          Pop(s, &e);

          printf("出棧的元素是:%d", e);

          printf("元素出棧后事實(shí)上并沒有清除,依然存在于內(nèi)存空間,所謂的出棧只是指針移動(dòng),出棧的元素是%d", *s->top);//判斷出棧后元素是否還存在于內(nèi)存中

          Destroy(s);

          return 0;

          }

          運(yùn)行結(jié)果:

          

        【C語言數(shù)據(jù)結(jié)構(gòu)中棧操作實(shí)驗(yàn)】相關(guān)文章:

        C語言符號(hào)積累06-22

        c語言基本符號(hào)06-22

        嵌入式C語言內(nèi)存操作編程重點(diǎn)知識(shí)點(diǎn)09-15

        C語言程序的結(jié)構(gòu)06-17

        嵌入式開發(fā)中C語言中結(jié)構(gòu)體解讀201611-02

        C++語言的基本符號(hào)06-22

        C++/Cli語言語法06-22

        概述C++語言特點(diǎn)06-14

        高中會(huì)考的實(shí)驗(yàn)操作考查10-01

        2017年9月全國計(jì)算機(jī)二級(jí)C語言操作題06-27

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>