2007.08.28栈的表示和实现之链栈
2007-08-28 16:51
260 查看
2
2.链栈
链栈即采用链表作为存储结构实现的栈。为便于操作,我们采用带头结点的单链表实现栈。由于栈的插入和删除操作仅限制在表头位置进行,所以链表的表头指针就作为栈顶指针,如图3.4所示。
在图3.4中,top为栈顶指针,始终指向当前栈顶元素前面的头结点。若top->next=NULL,则代表栈空。采用链栈不必预先估计栈的最大容量,只要系统有可用空间,链栈就不会出现溢出。采用链栈时,栈的各种基本操作的实现与单链表的操作类似。对于链栈,在使用完毕时应该释放其空间。链栈的结构可用C语言定义如下:
链栈的初始化和其它操作比较简单,这里不再讨论。我们主要看一下进栈和出栈时的指针变化情况:
(1) 进栈操作。
(2)出栈操作。
2.链栈
链栈即采用链表作为存储结构实现的栈。为便于操作,我们采用带头结点的单链表实现栈。由于栈的插入和删除操作仅限制在表头位置进行,所以链表的表头指针就作为栈顶指针,如图3.4所示。
在图3.4中,top为栈顶指针,始终指向当前栈顶元素前面的头结点。若top->next=NULL,则代表栈空。采用链栈不必预先估计栈的最大容量,只要系统有可用空间,链栈就不会出现溢出。采用链栈时,栈的各种基本操作的实现与单链表的操作类似。对于链栈,在使用完毕时应该释放其空间。链栈的结构可用C语言定义如下:
typedef stryct node { StackElementType data; struct node *next; }LinkStackNode; typedef LinkStackNode *LinkStack; |
(1) 进栈操作。
int Push(LinkStack top,StackElementType x) /*将数据元素x压入栈top中*/ { LinkStackNode *temp; temp=(LinkStackNode *)malloc(sizeof(LinkStackNode)); if(temp==NULL) return(FALSE);/*申请空间失败*/ temp->data=x; temp->next=top->next; top-next=temp;/*修改当前栈顶指针*/ return(TRUE); } |
int Pop(LinkStack top,StackElementType *x) {/*将栈top的栈顶元素弹出,放到x所指的存储空间中*/ LinkStackNode *temp; temp=top->next; if(temp==NULL)/*栈为空*/ return(FALSE); top->next=temp->next; *x=temp->data; free(temp);/*释放存储空间*/ return(TRUE); } |
相关文章推荐
- 数据结构(4):链栈的表示和实现
- 链栈的表示与实现
- 链栈的表示和实现
- 链栈的表示与实现
- 链栈的表示与实现
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 常用数学符号的 LaTeX 表示方法 (以下内容主要摘自“一份不太简短的 LATEX2e 介绍”) 1、指数和下标可以用^和_后加相应字符来实现。比如: 2、平方根(square root)
- 用C语言定义Bool类型(包括数据表示和操作实现),至 少包含and(与)、or(或)、not(非)、equiv(相等)这4个操作。
- 逆波兰表示法RPN 实现
- 链表的表示及实现
- 顺序栈和链栈实现汉洛塔
- 队列的表示和实现
- 链栈(java实现)
- C语言:实现线性表基本表示(数组元素的删除,插入,合并)
- 计算化学程序的实现:粒子数表象下波函数的表示
- C语言求一个整数的二进制形式表示中1的个数,用函数实现
- 第九周项目三-稀疏矩阵的三元组表示的实现及应用
- 第九周实践项目3—稀疏矩阵的三元组表示的实现及应用(1)
- 哈希表链地址法表示与实现--自己写数据结构
- 抽象数据类型Triplet的表示和实现