資料結構(C實現) 鏈棧

2021-06-25 20:20:09 字數 2111 閱讀 4419

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

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

鏈棧結點的型別描述:

typedef int elemtype;

typedef struct nodelinknode,*linkstack;

1.  初始化鏈棧init_linkstack()

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

//初始化鏈棧

linkstack init_linkstack()

2. 判斷鏈棧空isempty_linkstack(linkstack top)

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

//判斷鏈棧空

int isempty_linkstack(linkstack top)

3. 入鏈棧push_sqstack(sqstack* s,elemtype x)

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

//入棧操作

void push_sqstack(sqstack* s,elemtype x)

else

}

4. 出鏈棧pop_sqstack(sqstack* s,elemtype* x)

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

//出棧

void pop_sqstack(sqstack* s,elemtype* x)

else

*x = s->data[s->top--];

}

5. 讀取鏈棧頂元素top_sqstack(sqstack* s,elemtype* x)

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

//讀取棧頂元素

void top_sqstack(sqstack* s,elemtype* x)

else

*x = s->data[s->top];

}

6. 輸出棧中所有的元素print_sqstack(sqstack* s)

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

//輸出整個棧

void print_sqstack(sqstack* s)

int length = s->top;

while(length > -1)

printf("%d\t",s->data[length--]);

printf("\n");

}

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

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

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

資料結構鏈棧實現

如題 這是一套完整的可執行的 需要讀者有一定的基礎去閱讀 語言是用c語言實現 在c 環境中編寫 在c 中可直接執行 在c語言中需要改部分標頭檔案和輸出語句 標頭檔案 這要是 的宣告部分 ifndef head define head include using namespace std typed...

C資料結構 鏈棧

鏈棧的設計依賴於筆者之前設計的鍊錶,詳情請看 c資料結構 線性表之單鏈表 ifndef linkedstack h define linkedstack h include linkedlist.h typedef linked list linked stack 建立鍊錶棧 return link...

C 資料結構 鏈棧

public class linkstacknode 節點指標 public linkstacknode next public linkstacknode t d 鏈棧 public class linkstack 總長度 public int count 入棧 public void push ...