C實現鏈棧

2021-09-25 21:50:07 字數 1827 閱讀 7735

1. 實驗目的

(1)掌握棧的鏈結儲存結構;

(2)驗證鏈棧及其基本操作的實現;

(3)驗證棧的操作特性。

2. 實驗內容

(1)建立乙個空棧

(2)對已建立的棧進行插入、刪除、取棧頂元素等基本操作。

3. 實驗提示

定義鏈棧中的結點結構(鏈棧中結點結構基於單鏈表相同),定義鏈棧的資料型別——鏈棧結構體,包括入棧、出棧、取棧頂元素等基本操作。本節的實驗採用模板實現,要求學生:

(1)假設棧元素為字元型,修改主函式;

(2)重新設計測試資料,考查棧的上溢、下溢等情況,修改主函式。

4. 程式**

#include#include#include//棧元素的資料型別,假設為int型 

typedef int datatype;

typedef struct node

node;

//棧頂指標

node *top;

//鏈棧的初始化

void initstack(node *top)

} //入棧

datatype *push(node *top,datatype x)

else

top=s;

if(top!=null)

return top;

} //出棧

datatype *pop(node *top,datatype *ptr)

//儲存棧頂元素

*ptr=top->data;

//將棧頂節點摘鏈

top=top->next;

free(p);

return top;

} //獲取棧頂元素

int gettop(node *top,datatype *ptr)

else

}//判空操作 若空則返回1

int empty(node *top)

else

} //銷毀棧

void destorystack(node *top)

}

int main()

if(top=pop(top,&x))

if(gettop(top,&x)==1)

printf("請輸入待插元素值:");

scanf("%d",&x);

top=push(top,x);

if(empty(top)==1)

else

destorystack(top);

return 0;

}

5. 實驗結果

6. 實驗結果1.

解決:對於問題1乙個是因為s沒有宣告,並且傳參應該是top,把s換成top就對了。還有下面乙個問題說destorystack()這個函式沒有宣告,然後我就嘗試自己宣告,不過最終失敗了,然後我就拿著書照著宣告一遍,最後好使了。

對於問題2是因為data型別定義錯了,結構體應該寫成typedef struct node這樣,最後修改完之後就能執行了。

C 實現鏈棧

定義乙個結點類,包含資料域和指標域,並定義構造方法 定義了乙個介面,再實現介面。using system using system.collections.generic using system.linq using system.text using system.threading.tasks...

鏈棧的實現 c

貼上自己的 include using namespace std class linkstack linkstack void push int x void pop int gettop 取頂操作 bool empty 判空操作 linkstack next private linkstack ...

鏈棧之C 實現

鏈棧是借用單鏈表實現的棧。其不同於順序棧之處在於 1 鏈棧的空間是程式執行期間根據需要動態分配的,機器記憶體是它的上限。而順序棧則是 靜態分配記憶體的。2 鏈棧動態分配記憶體的特性使得它一般無需考慮棧溢位的問題。鏈棧的的組織結構如下圖所示。容易發現其是架構的單鏈表的基礎之上的。下面介紹下我用c 實現...