出棧入棧解析

來源:互聯網
上載者:User

由於資料結構的作業,對出棧入棧進行了認真的理解,其實很好把握的。下面一段代碼在vs08上經過調試通過,裡面有對出棧入棧操作的詳細過程,我用的是棧資料類型為字元型的做例子的,因為貌似在網上沒有找到字元型的。。。我只是簡單修改了一下整數資料型別的棧而已~

#include  <stdlib.h>   #include "stdio.h"   #include<string.h>  typedef char SElemType;       //棧資料元素的類型  #define STACK_INIT_SIZE 10  //棧儲存空間的初始分配量  #define STACKINCREMENT 10    //棧儲存空間的分配增量  typedef struct  {  SElemType *base;         //構造之前和銷毀之後,base的值為NULL  SElemType *top;             //棧頂指標  int stacksize;           //當前分配的儲存容量(以sizeof(SElemType)為單位)  }Stack;  char InitStack(Stack &S)  {  S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); //通過malloc函數分配空間  if (!S.base)  return 0;               //如果分配失敗,則返回0  S.top=S.base;                //棧頂指標設為棧底地址  S.stacksize=STACK_INIT_SIZE; //當前分配的空間  return 1;  }  char StackEmpty(Stack S)  {  if (S.base)  {  if (S.base==S.top)       //如果棧為空白棧,則返回1(true),否則返回0(false)  {  return 1;  }  }  return 0;  }  char Push(Stack &S,SElemType e)  {  if (S.base)  {  if ((S.top-S.base)>=S.stacksize)    //棧滿,追加儲存空間  {  S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)* sizeof(SElemType));  if(S.base==NULL)  return 0;                  //如果重新分配空間失敗,則返回0(false),表示插入不成功  S.top=S.base+S.stacksize;               //設定數組的新地址  S.stacksize+=STACKINCREMENT;    //分配空間要加上新增的空間  }  *S.top++=e; return 1;  }  return 0;  }  //*S.top++=e     //棧頂位置後++,本次運算S.top棧空間不變,所以是把S棧頂指標指向E,運算完成後棧空間才自增1  //*++S.top=e  //棧頂位置前++,本次運算S.top棧頂向前增加1,所以是把S棧新增的棧頂指向E。  char Pop(Stack &S,SElemType &e)  {  if (S.base)  {  if (S.top>S.base)    //若棧不是空的  {  e=*--S.top;  return 1;  }  }  return 0;  }  char StackTraverse(Stack &S)//依次輸出從棧底到棧頂的每個元素  {  int i;  if (S.base)  {  printf("\n依次輸出從棧底到棧頂的每個元素為:\n");  for(i=0;i<S.top-S.base;i++)  {  printf("%c  ",S.base[i]);   //依次列印資料元素  }  printf("\n");  return 1;  }  return 0;  }  void main()  {  Stack S;  char x,y;      InitStack(S);  x='c';y='k';  Push(S,x);StackTraverse(S);Push(S,'a');StackTraverse(S);Push(S,y);StackTraverse(S);  Pop(S,x);StackTraverse(S);Push(S,'t');StackTraverse(S);Push(S,x);StackTraverse(S);  Pop(S,x);StackTraverse(S);Push(S,'s');StackTraverse(S);  while(!StackEmpty(S)){Pop(S,y);StackTraverse(S);printf("%c",y);}  printf("%c\n",x);  }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.