学习目标:栈的链式存储实现
学习内容:
栈的代码实现
1、 创建栈(无头结点)
typedef struct LinkNode{
ElemType data;
struct LinkNode*pnext;
}PLStack*;
/*
typedef struct LinkStack{
PLinkNode* ptop = NULL;
PLinkNode *pbottom = NULL;
}LStack, PLStack*;
*/ //一般来说,不需要栈顶和栈底的指针
void main(){
PLStack LS;
InitLS(&LS);
return;
}
void InitLS(PLStack P){
//p = (PLStack)molloc(sizeof(LinkNode)); //一般来说,链栈不必有头结点。需要的话,加上这一句
/* if(p->ptop == NULL){
printf("分配内存失败\n");
exit(-1);
}
*/
p->pnext = NULL;
}
2、 压栈、出栈(无头结点)
压栈(有无头结点一样):思路和链表头插法一样
void put(PLStack p, int x)
{
//LinkNode new;不能这么写,因为执行这个函数就会回收该变量的空间,要用molloc动态分配才行
LinkNode *pnew = (LinkNode*)malloc(sizeof(LinkNode));
//下面三句,头插法思想
pnew->data = x;
pnew->pnext = p->pnext;
p->pnext = pnew;
return;
}
bool pop(PLStack p)
{
if(empty(p) == 1){
printf("栈为空,无法出栈");
return false;
}
else{
LinkNode *t = p;
p = p->pnext;
free(t);
return true;
}
return
}
bool empty(PLStack p)
{
if(p->pnext == NULL){
return true;
}else{
return false;
}
}
学习时间:
1、 2021-6-7 13:30-14:00
2、2021-6-12 21:30-22:30
学习产出:
1、 数据结构视频3.1.3
2、栈可以有头结点可以没有,常用的是没有头结点。