資料結構(C實現)------- 鏈棧

來源:互聯網
上載者:User

標籤:棧的鏈式儲存   鏈棧的實現   

描述:     

        鏈棧,即棧的鏈式儲存結構,鏈棧通常使用不帶頭結點的單鏈表來表示,因此其結點的結構和單鏈表的結點結構相同。

        在一個鏈棧中,棧底就是鏈表的最後一個結點,而棧頂總是鏈表的第一個結點。因此,新入棧的元素即為鏈表中採用頭插法新加入的結點,一個鏈棧可以由棧頂指標唯一確定,當top為NULL時,則表示該棧是一個空的鏈棧。

 實現:

         鏈棧結點的類型描述:

typedef int ElemType;typedef struct node{ElemType data;struct node *next;}LinkNode,*LinkStack;

基本操作

         1.  初始化鏈棧Init_LinkStack()

         鏈棧的初始化操作就是建立一個不帶頭結點的空的單鏈表,如下:

//初始化鏈棧LinkStack Init_LinkStack(){LinkStack S;S = NULL;return S;}

     

       2. 判斷鏈棧空IsEmpty_LinkStack(LinkStack top)

       根據定義,當棧頂指標top為NULL時,表示該結點為一個空棧,返回1,否則,則返回0 。

//判斷鏈棧空int IsEmpty_LinkStack(LinkStack top){if(top == NULL)return 1;elsereturn 0;}
 

      3. 入鏈棧Push_SqStack(SqStack* S,ElemType x)

      入棧,即向棧中插入一個元素作為新的棧頂元素,首先要動態申請一個結點作為新元素的儲存空間,然後將新資料元素寫入申請的儲存空間中,並將棧頂指標top的值寫入新結點中的指標域,最後將棧頂指標指向新插入的結點,代碼如下:

//入棧操作void Push_SqStack(SqStack* S,ElemType x){//棧滿,則退出if(isFull_SqStack(S)){printf("棧滿!\n");exit(0);}else{S->data[++(S->top)] = x;}}


      4. 出鏈棧Pop_SqStack(SqStack* S,ElemType* x)
      出棧,即從棧中輸出一個元素,並將其刪除,具體過程為:當棧頂元素出棧時,先判斷棧頂指標是否為空白,如果空,則輸出提示資訊並退出,否則,取出棧頂元素的值返回,然後,將棧頂指標向後移動,並且釋放掉被刪除棧頂元素的儲存空間。

//出棧void Pop_SqStack(SqStack* S,ElemType* x){//如果棧空,則輸出提示資訊,並退出if(isEmpty_SqStack(S)){printf("棧空!\n");exit(0);}else*x =  S->data[S->top--];}

    

      5. 讀取鏈棧頂元素Top_SqStack(SqStack* S,ElemType* x)

      讀取鏈棧頂元素與出棧不同,二者的區別在於:讀取棧頂元素時,棧頂指標不發生變化,僅取得棧頂元素的值;而出棧則還要將棧頂元素刪除,在此時棧頂指標也要發生變化;但二者都要判斷棧是否為空白。

//讀取棧頂元素void Top_SqStack(SqStack* S,ElemType* x){if(isEmpty_SqStack(S)){printf("棧空!\n");exit(0);}else *x = S->data[S->top];}

     6. 輸出棧中所有的元素Print_SqStack(SqStack* S)

     從棧頂開始遍曆整個鏈棧,輸出所有的元素,同樣,需要判斷鏈棧是否為空白。

//輸出整個棧void Print_SqStack(SqStack* S){if(isEmpty_SqStack(S)){printf("棧空!\n");exit(0);}int length = S->top;while(length > -1)printf("%d\t",S->data[length--]);printf("\n");}
   

說明:

         以上只是鏈棧最基本的操作,當然了,在實際應用中,往往不僅涉及入棧和出棧等操作,而且還需要對非棧頂的元素進行訪問。

 順序棧和鏈棧的比較:

         1. 順序棧易於根據棧頂指標的位置進行相對位移,快速定位並讀取棧的內部元素,因此,順序棧比鏈棧應用更廣泛。

         2. 順序棧讀取內部元素的時間複雜度為O(1),鏈棧讀取內部元素的時間複雜度為O(n),其中,n為鏈棧的長度。


資料結構(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.