族谱网 头条 人物百科

堆栈

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:569
转发:0
评论:0
操作堆叠数据结构使用两种基本操作:推入(push)和弹出(pop):推入:将数据放入堆叠的顶端(阵列形式或串列形式),堆叠顶端top指标加一。弹出:将顶端数据资料输出(回传),堆叠顶端资料减一。特点栈的基本特点:先入后出,后入先出。除头尾节点之外,每个元素有一个前驱,一个后继。抽象定义以下是堆栈的VDM(ViennaDevelopmentMethod(英语:ViennaDevelopmentMethod)):函数签名:此处的N代表某个元素(如自然数),而U表示集合求交。语义:软件堆栈阵列堆叠堆栈可以用链表和数组两种方式实现,一般为一个堆栈预先分配一个大小固定且较合适的空间并非难事,所以较流行的做法是Stack结构下含一个数组。如果空间实在紧张,也可用链表实现,且去掉表头。这里的例程是以数组实现的。#include#include#include#definestackstructStack...

操作

堆叠数据结构使用两种基本操作:推入(push)和弹出(pop):

推入:将数据放入堆叠的顶端(阵列形式或串列形式),堆叠顶端top指标加一。

弹出:将顶端数据资料输出(回传),堆叠顶端资料减一。

特点

栈的基本特点:

先入后出,后入先出。

除头尾节点之外,每个元素有一个前驱,一个后继。

抽象定义

以下是堆栈的VDM( Vienna Development Method ( 英语 : Vienna Development Method ) ):  

函数签名:

此处的N代表某个元素(如自然数),而U表示集合求交。

语义:

软件堆栈

阵列堆叠

堆栈可以用链表和数组两种方式实现,一般为一个堆栈预先分配一个大小固定且较合适的空间并非难事,所以较流行的做法是 Stack 结构下含一个数组。如果空间实在紧张,也可用链表实现,且去掉表头。这里的例程是以数组实现的。

#include#include#include#define stack struct Stack#define STACK_POP_ERR 42/* 堆疊資料結構 堆栈数据结构 */structStack{intval[10];// 陣列空間inttop;// 堆疊頂端指標(栈顶)};/* 檢查堆疊是否為空 */boolempty(stack*stk){returnstk->top==0;}/* 推入資料 */voidpush(stack*stk,intx){stk->top=stk->top+1;stk->val[stk->top]=x;}/* 彈出并返回資料 */intpop(stack*stk){if(empty(stk))returnSTACK_POP_ERR;// 不能彈出else{stk->top=stk->top-1;returnstk->val[stk->top+1];}}intmain(){// 宣告并初始化資料結構空間stackstk;stk.top=0;// 推入四个push(&stk,3);push(&stk,4);push(&stk,1);push(&stk,9);// 弹出三个printf("%d ",pop(&stk));printf("%d ",pop(&stk));printf("%d ",pop(&stk));return0;}

串列堆叠

/* 链栈的结构定义 */typedefstruct{SLinktop;// 棧頂指針intlen​​gth;// 棧中元素個數}Stack;// 构造空栈 SvoidInitStack(Stack&S){S.top=NULL;// 設棧頂指針的初值為"空"S.length=0;// 空棧中元素個數為0}// 如果指针反过来从栈底到栈顶的话,删除栈顶元素时,为修改其前驱指针,需要从栈底一直找到栈顶。// 在棧頂S 之上插入元素e為新的棧頂元素,並返回成功與否boolPush(Stack&S,ElemTypee){p=newLNode;// 建新的結點if(!p)returnfalse;// 存儲分配失敗p->data=e;p->next=S.top;// 鏈接到原來的棧頂S.top=p;// 移動棧頂指針++S.length;// 棧的長度增1}// 在链栈的类型定义中设立“栈中元素个数”的成员是为了便于求得栈的长度。// 刪除S 棧頂且以e 返回其數值,返回成功與否boolPop(Stack&S,SElemType&e){if(!S.top)returnfalse;else{e=S.top->data;// 返回棧頂元素q=S.top;S.top=S.top->next;// 修改棧頂指針--S.length;// 棧的長度減1deleteq;// 釋放被刪除的結點空間returntrue;}}

堆栈有时候也常用来指代堆栈段。

硬件堆栈

架构层次上的堆栈通常被用以申请和访问内存。

硬件支持

大多数CPU都有用作堆栈指针的寄存器。


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
扫一扫添加客服微信