<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言數據結構中棧操作實驗

    時間:2025-11-02 21:19:47 C語言

    C語言數據結構中棧操作實驗

      c語言中棧是一種數據結構,后進先出,即最后進入棧的數據最先彈出。以下是百分網小編搜索整理的關于C語言數據結構中棧操作實驗,需要的朋友可以參考一下!想了解更多相關信息請持續關注我們應屆畢業生考試網!

      實驗:

      編寫一個程序實現順序棧的各種基本運算,并在此基礎上設計一個主程序,完成如下功能:

      (1)初始化順序棧

      (2)插入元素

      (3)刪除棧頂元素

      (4)取棧頂元素

      (5)遍歷順序棧

      (6)置空順序棧

      分析:

      棧的順序存儲結構簡稱為順序棧,它是運算受限的順序表。

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

      出棧和讀棧頂元素操作,先判棧是否為空,為空時不能操作,否則產生錯誤。通常棧空作為一種控制轉移的條件。

      注意:

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

      (2)棧底位置是固定不變的,可設置在向量兩端的任意一個端點

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

      順序棧的實現:

      #include <stdio.h>

      #include <malloc.h>

      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;

      /pic/p>

      Status InitStack(SqStack *s)

      {

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

      if(!s->base)

      {

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

      return Error;

      }

      s->top = s->base;

      s->stacksize = INIT_SIZE;

      return Ok;

      }

      /pic/p>

      Status ClearStack(SqStack *s)

      {

      s->top = s->base;

      return Ok;

      }

      /pic/p>

      Status StackEmpty(SqStack *s)

      {

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

      return True;

      else

      return False;

      }

      /pic/p>

      Status Destroy(SqStack *s)

      {

      free(s->base);

      s->base = NULL;

      s->top = NULL;

      s->stacksize=0;

      return Ok;

      }

      /pic/p>

      Status GetTop(SqStack *s, SElemType &e)

      {

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

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

      return Ok;

      }

      /pic/p>

      Status Push(SqStack *s, SElemType e)

      {

      if(s->top - s->base >= s->stacksize)/pic/p>

      {

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

      if(!s->base)

      {

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

      return Error;

      }

      s->top = s->base + s->stacksize;/pic/p>

      s->stacksize += STACKINCREMENT;/pic/p>

      }

      *s->top++ = e;

      return Ok;

      }

      /pic/p>

      Status Pop(SqStack *s, SElemType *e)

      {

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

      --s->top;

      *e = *(s->top);

      return Ok;

      }

      /pic/p>

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

      {

      SElemType *b = s->base;/pic/p>

      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("請輸入要進棧的個數:");

      scanf("%d", &n);

      while(n--)

      {

      int m;

      scanf("%d", &m);

      Push(s, m);

      }

      StackTraverse(s, visit);

      puts("");

      puts("8進棧后:");

      Push(s, 8);

      StackTraverse(s, visit);

      puts("");

      Pop(s, &e);

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

      printf("元素出棧后事實上并沒有清除,依然存在于內存空間,所謂的出棧只是指針移動,出棧的元素是%d ", *s->top);/pic/p>

      Destroy(s);

      return 0;

      }

      運行結果:

    【C語言數據結構中棧操作實驗】相關文章:

    C語言對棧的實現基本操作介紹01-15

    c語言指針運用中堆和棧的區別03-05

    C語言中棧的表示和實現08-16

    C語言的底層操作09-05

    Go與C語言的操作02-15

    C語言位操作是11-26

    c語言stack(棧)和heap(堆)的使用01-28

    詳解C語言文件操作中fgets與fputs函數12-31

    C語言文件操作中fgets與fputs函數講解02-26

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人