【例】用 不带头结点 的单链表存储链栈,设计初始化栈、判断栈是否为空、进栈和出栈等相应的算法。
- 标准版
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
//初始化
void initStack(LNode *&lst){
lst=NULL;
}
//判断是否为空
int isEmpty(LNode *lst){
if(lst==NULL)
return 1;
else
return 0;
}
//进栈
void push(LNode *&lst,int x){
LNode *p;
p=(LNode*)malloc(sizeof(LNode));
p->data=x;
p->next=NULL;
//以下为插入操作
p->next=lst;
lst=p;
}
//出栈
void pop(LNode *&lst,int &x){
if(lst==NULL)
return 0;
LNode *p;
p=lst;
x=p->data;
lst=lst->next;
free(p);
return 1;
}
- 解析版
/* 与有头结点的链栈相比,结点结构不会改变 */
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
//初始化
void initStack(LNode *&lst){
lst=NULL; //若是有头结点的,则为 lst->next=NULL;
}
//判断是否为空
int isEmpty(LNode *lst){
if(lst==NULL) //若是有头结点的,则为 if(lst->next==NULL)
return 1;
else
return 0;
}
//进栈
void push(LNode *&lst,int x){
/* 创建一个结点,里面存放要插入的值 */
LNode *p;
p=(LNode*)malloc(sizeof(LNode));
p->data=x;
p->next=NULL;
//以下为插入操作
p->next=lst;
lst=p;
}
//出栈
void pop(LNode *&lst,int &x){
if(lst==NULL) //空栈不能出栈
return 0;
LNode *p;
p=lst; // p 和 lst 都指向最后一个结点,即栈尾结点
x=p->data; // 用 x 取得要出栈元素的 data 的值
lst=lst->next; //将 lst 指向要出栈元素的前一个元素
free(p); //出栈,释放掉空间
}
原文地址:https://www.jb51.cc/wenti/3281571.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。