加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

栈操作之双端顺序栈

发布时间:2020-12-13 20:21:05 所属栏目:PHP教程 来源:网络整理
导读:数据结构: 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出

数据结构:

栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。

操作系统:

由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

双端栈模板代码:

#define TRUE 1 #define FALSE 0 #define M 100 typedef struct { StackElementType Stack[M]; StackElementType top[2]; /*top[0]和top[1]分别为两个栈顶指示器*/ }DqStack; /*初始化操作。*/ void InitStack(DqStack *S) { S->top[0]=-1; S->top[1]=M; } /*进栈操作。*/ int Push(DqStack *S,StackElementType x,int i) { /*把数据元素x压入i号堆栈*/ if(S->top[0]+1==S->top[1]) /*栈已满*/ return(FALSE); switch(i) { case 0: S->top[0]++; S->Stack[S->top[0]]=x; break; case 1: S->top[1]--; S->Stack[S->top[1]]=x; break; default: /*参数错误*/ return(FALSE) } return(TRUE); } /*出栈操作。*/ int Pop(DqStack *S,StackElementType *x,int i) { /* 从i 号堆栈中弹出栈顶元素并送到x中 */ switch(i) { case 0: if(S->top[0]==-1) return(FALSE); *x=S->Stack[S->top[0]]; S->top[0]--; break; case 1: if(S->top[1]==M) return(FALSE); *x=S->Stack[S->top[1]]; S->top[1]++; break; default: return(FALSE); } return(TRUE); }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读