暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

链栈

小柯南有话说 2021-09-06
195



点击


上方蓝字

关注我









链栈


链栈,字面意思,就是用链表来实现一个栈的数据结构。


链栈动态图



链栈的结构体定义



typedef int SElemType;
typedef struct node {
SElemType data;//数据域
struct node *next;//指针域
}LinkStackNode;

入栈、出栈



1.入栈三步

S1:p->data=x;(给待插入的结p的数据域赋值)

S2: p->next=top->next;(给待插入的结点的数据域赋值,即将结点p指向当前top指向的结点)


S3:top->next=p;(将top指针移到p结点之上)

入栈:
Status Push(LinkStackNode *top, SElemType x) {
// 将数据元素x压入栈top中
LinkStackNode * p;
p = (LinkStackNode *)malloc(sizeof(LinkStackNode));
if (!p) return ERROR; //申请空间失败
p->data = x;
p->next = top->next;
top->next = p; //修改当前栈顶指针
return OK;
}


2.出栈两步

S1:p=top->next;(将top指针指向的下一节点地址赋给p,p为待删除结点的地址)

S2: top->next=p->next;(将top指针下移)


出栈:
Status Pop(LinkStackNode *top, SElemType *x){ 将栈top的栈顶元素弹出, 放到x所指的存储空间中 
LinkStackNode * p;
p = top->next;
if (p == NULL)   栈为空
return OVERFLOW;
top->next = p->next;
*x = p->data;
free(p);    // 释放存储空间
return OK;}




文末

可执行文件

EXE


01

单链表



02

顺序表



03

顺序栈



文章转载自小柯南有话说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论