鏈式棧是一種資料儲存結構,可以通過單鏈表的方式來實現,使用鏈式棧的優點在於它能夠克服用陣列實現的順序棧空間利用率不高的特點,但是需要為每個棧元素分配額外的指標空間用來存放指標域。
標頭檔案 linkstack.h
#ifndef __linkstack_h__
#define __linkstack_h__
#include "error.h"
#define false 0
#define true 1
typedef int stackdata;
typedef struct _node
node;
typedef struct _linkstack
linkstack;
// 建立棧
linkstack* create_stack ();
// 判棧空否
int stackempty (linkstack* s);
// 進棧
int push (linkstack* s, stackdata x);
// 出棧
int pop (linkstack* s, stackdata *x);
// 獲取棧頂元素
int gettop (linkstack* s, stackdata *x);
// 銷毀表
int destroy (linkstack* s);
#endif // __linkstack_h__
原始檔 linkstack.c
#include
"linkstack.h"
#include
// 建立棧
linkstack* create_stack ()
// 置空棧
s->top =
null;
return s;
}// 判棧空否
int stackempty (linkstack* s)
return s->top ==
null;
}// 進棧
int push (linkstack* s, stackdata x)
// 新建結點
node* node = (node*) malloc(sizeof(node)/sizeof(char));
if (null
== node)
node->
data
= x;
node->next = s->top;
s->top = node;
return
true;
}// 出棧
int pop (linkstack* s, stackdata *x)
if (stackempty(s))
node* p = s->top;
*x = p->
data;
s->top = p->next;
free(p);
return
true;
}// 獲取棧頂元素
int gettop (linkstack* s, stackdata* x)
if (stackempty(s))
*x = s->top->
data;
return
true;
}// 銷毀棧
int destroy (linkstack* s)
int x;
while (true
!= stackempty(s))
free(s);
return
true;
}
資料結構 完成順序棧,鏈式棧的基本操作
seqstack.h pragma once include define title printf n s n function typedef char seqstacktype typedef struct seqstack seqstack void seqstackinit seqstac...
資料結構之鏈式棧
好久不見,前面我們學過了資料結構的順序棧。今天我們來學習下鏈式棧的實現,鏈式棧的話,還是要利用前面我們實現的鏈式鍊錶,不知道鏈式鍊錶的,出門左轉,前面就有介紹。第七個例子,鏈式棧的實現 注 把我們先前實現的鏈式鍊錶的標頭檔案和實現檔案包含進來 標頭檔案 ifndef linkstack h defi...
資料結構之棧的基本操作
棧的結構型別,和基本操作如下 typedef struct stack,st void initstack stack s 初始化棧 void destroystack stack s 銷毀棧 void push stack st,type e 插入元素 type pop stack st 彈出棧頂...