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 實現...