可以用陣列來表示棧的結構。定義乙個結構體,其中有乙個陣列,動態分配記憶體。top記錄棧頂。
標頭檔案
#ifndef _head_h
#define _head_h
#define minsize 5
//定義最小長度為5
#define empty -1
//棧空情況
typedef
int elementtype;
typedef
struct node* stack;
typedef
struct nodenode;
stack createstack
(void);
void
push
(stack ss, elementtype x)
;void
pop(stack ss)
;void
freespace
(stack ss)
;void
display
(stack ss)
;void
makeempty
(stack ss)
;int
isempty
(stack ss)
;int
isfull
(stack ss)
;void
clean
(void);
#endif
操作集
#include
#include
#include
"head.h"
stack createstack
(void
) s =
(stack)
malloc
(sizeof
(node));
if(s ==
null
) s->array =
(elementtype*
)malloc
(length*
sizeof
(elementtype));
if(s->array ==
null
) s->arraymaxlength = length;
makeempty
(s);
return s;
}void
push
(stack ss, elementtype x)
ss->array[
++ss->top]
= x;
}void
pop(stack ss)
ss->top--;}
void
clean
(void
)int
isempty
(stack ss)
intisfull
(stack ss)
void
makeempty
(stack ss)
void
display
(stack ss)if(
isempty
(ss)
)int length = ss->top +1;
printf
("%d data:"
, length)
;for
(int i =
0; i < length; i++)}
printf
("\n");
}void
freespace
(stack ss)
}
主函式
#include
#include
"head.h"
intmain
(void
)display
(s);
printf
("*******************************************\n");
printf
("彈棧操作\n");
pop(s)
;display
(s);
printf
("*******************************************\n");
printf
("清空棧操作\n");
makeempty
(s);
display
(s);
printf
("*******************************************\n");
printf
("釋放記憶體操作\n");
freespace
(s);
s->array =
null
;//釋放記憶體只是將指標指向的記憶體中的資料清了,指標並沒有指向null,在這裡置null,不要讓指標是乙個野指標。
下標大的元素是接近棧頂的。
棧的順序儲存
棧的順序儲存就是用連續的空間儲存棧中的結點,一般都是用陣列來實現這種連續空間的。為了保證棧的filo特點,所以進棧出棧總是在棧頂一端進行。因此,不會引起類似順序表中的大量資料的移動。用陣列實現棧結構時,棧底bottom可取下標為0的陣列元素,假定用top給出棧頂元素的下標位址,即棧頂指標,那麼初始化...
棧的順序儲存
ifndef seqstack h define seqstack h include include include 陣列去模擬棧的順序儲存 define max size 1024 define seqstack true 1 define seqstack false 0 typedef st...
棧的順序儲存
seqstack.h pragma once include include include ifdef cplusplus extern c typedef void seqstack 使用陣列高下標的位置作為棧頂,因為插入和刪除操作中不需要移動陣列中的元素 初始化 seqstack init s...