c語言資料結構之棧的基本操作

來源:互聯網
上載者:User

標籤:

棧是限定僅在表尾進行插入或者刪除操作的線性表。各位也可以到360雲端硬碟中下載完整程式,運行環境為vc++6.0 

http://yunpan.cn/cVKkv9fmsp4wB  訪問密碼 b737

1 typedef struct2 {3     SelemType *base;4     SelemType *top;5     int        stacksize;6 }SqStack;

現在來介紹下棧的操作實現。

/********************************************************************函數名稱:  InitStack函數作用:  構造一個空棧輸入參數:  s輸出參數:  無傳回值:    FALSE or TRUE********************************************************************/Status InitStack(SqStack &s){   s.base=(SelemType *)malloc(STACK_INIT_SIZE*sizeof(SelemType));  //申請空間   if(!s.base) return FALSE;    //如果申請不成功,返回FALSE   s.top=s.base;                //申請成功,令棧頂指標等於棧尾指標   s.stacksize=STACK_INIT_SIZE; //stacksize表示申請分配的空間大小   return TRUE;}
/********************************************************************函數名稱:  Push函數作用:  將元素e入棧 輸入參數:  棧s,元素e輸出參數:  無傳回值:    FALSE or TRUE時間複雜度:O(1)********************************************************************/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) return FALSE;      s.top=s.base+s.stacksize;     s.stacksize+=STACKINCREMENT;   }   *s.top++=e;   return TRUE;}
/********************************************************************函數名稱:  StackBrower函數作用:  遍曆輸入參數:  棧s輸出參數:  無傳回值:    FALSE or TRUE時間複雜度:O(n)********************************************************************/Status StackBrower(SqStack s){    if(!s.base)     {        cout<<"不存在棧s"<<endl;        return FALSE;    }    if(s.top==s.base)     {        cout<<"s為空白棧"<<endl;        return FALSE;    }    while(!(s.top==s.base))    {       cout<<*(--s.top)<<"  ";    }    cout<<endl;    return TRUE;}
/********************************************************************函數名稱:  DestroyStack函數作用:  銷毀空棧輸入參數:  棧s輸出參數:  無傳回值:    FALSE or TRUE時間複雜度:O(1)********************************************************************/Status DestroyStack(SqStack &s){   free(s.base);          //只需要釋放base指標    s.base=NULL;   return TRUE;}   
/********************************************************************函數名稱:  ClearStack函數作用:  銷毀空棧輸入參數:  棧s輸出參數:  無傳回值:    FALSE or TRUE時間複雜度:O(1)********************************************************************/Status ClearStack(SqStack &s){    if(s.top==s.base) return TRUE;    s.top=s.base;    return TRUE; }  
/********************************************************************函數名稱:  StackEmpty函數作用:  判斷是否為空白棧輸入參數:  棧s輸出參數:  無傳回值:    0非空棧 or 1空棧時間複雜度:O(1)********************************************************************/Status StackEmpty(SqStack &s){   return(s.base==s.top);}
/********************************************************************函數名稱:  StackLength函數作用:  擷取當前儲存資料的長度輸入參數:  棧s輸出參數:  無傳回值:    棧長時間複雜度:O(1)********************************************************************/int    StackLength(SqStack s){ return (s.top-s.base);}Status GetTop(SqStack s,SelemType &e){  e=*(s.top-1);  return TRUE;}

接下來就是main函數測試代碼

#include"StackLib.h"void main(){  int e[20];  int i=0;  int a;  for(i=0;i<20;i++) e[i]=i;  SqStack s;  InitStack(s);           //構造一個空棧  for(i=0;i<20;i++)   {      Push(s,e[i]);       //資料入棧  }  StackBrower(s);         //遍曆堆棧  cout<<"當前儲存資料:"<<StackLength(s)<<"個"<<endl;  GetTop(s,a);            //獲得棧頂元素,並列印  cout<<a<<endl;    ClearStack(s);          //清空棧  StackBrower(s);         //遍曆棧  cout<<"1為空白棧,0非空:"<<StackEmpty(s)<<endl;  //判斷棧是否為空白  DestroyStack(s);        //銷毀堆棧  StackBrower(s);         //}

 

c語言資料結構之棧的基本操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.