链式栈基本概念
相较于顺序结构链式结构的好处是大小是不固定的但指针操作比较复杂。这里依旧使用了带首尾指针的方式。这样的好处是容易用来实现受限栈的实现,这里不做过多赘述。有兴趣的小伙伴可以自己动手实现,这里给出一个参考例题(首端插入,两端输出的栈)感兴趣的小伙伴可以一起交流一下
栈的基本操作
基本结构
这里分为主体和节点,主体是首尾指针,节点和链式存储的线性表的结构(可参见我以前的文章)
节点
//定义节点
typedef struct Item{
ElemType data;
Item* next;
};
主体
//定义栈带首尾指针
typedef struct Stack{
Item* top;
Item* bottom;
int length; //储存线性表长度
};
初始化操作
这里也分为栈主体和节点,一个栈可能要有多个节点
//初始化节点
Item* initItem(){
Item* I;
I = (Item*)malloc(sizeof(Item));
I->data = 0;
I->next = NULL;
return I;
}
//初始化栈
Stack* initStack(){
//Item* I = initItem();
Stack* T;
T = (Stack*)malloc(sizeof(Stack));
T->top = NULL;
T->bottom = NULL;
T->length = 0;
}