3.21(双向栈)
来源:互联网 发布:哔哩哔哩mac版10.9 编辑:程序博客网 时间:2024/05/20 22:38
因为top0和top1都指向最后一个元素的下一个位置,所以最好不要把数组占满,如存储6个数,最好开一个7个位置的数组。
#include <iostream>#include <stdlib.h>using namespace std;typedef struct stack{ int* base; int top[2]; int size;}qstack,*pstack;void init(pstack s,int size){ s->base=(int*)malloc(size*sizeof(int)); s->top[0]=0;//数组头 s->top[1]=size-1;//数组尾 s->size=size;}void push(pstack s,int i,int num){ if(s->top[0]==s->top[1])//如果是满栈 return ; else if(i==0)//如果从左边进入 { s->base[s->top[0]]=num; s->top[0]=s->top[0]+1; } else if(i==1)//如果从右边进入 { s->base[s->top[1]]=num; s->top[1]=s->top[1]-1; }}void pop(pstack s,int i,int &num_){ if(s->base[s->top[0]]==0 && i==0)//如果左边是空栈 return ; else if(s->base[s->top[1]]==1 && i==1)//如果右边是空栈 return ; else if(i==0) { s->top[0]--; num_=s->base[s->top[0]]; } else if(i==1) { s->top[1]++; num_=s->base[s->top[1]]; }}void traverse(pstack s,int i){ pstack q=s; if(i==0) { q->top[0]--;//因为指向的是最后一个元素的下一个位置,所以需要先减一; while(q->top[0]>=0) { cout<<q->base[q->top[0]]; q->top[0]--; } } if(i==1) { q->top[1]++; while(q->top[1]<=(q->size-1)) { cout<<q->base[q->top[1]]; q->top[1]++; } }}int main(){ qstack s; init(&s,7); push(&s,0,1); push(&s,0,2); push(&s,0,3); push(&s,1,3); push(&s,1,2); push(&s,1,1); traverse(&s,1); }http://blog.csdn.net/mixuema/article/details/49228541
0 0
- 3.21(双向栈)
- 数据结构3双向栈
- 双向链表 + 栈 + 队列
- 静态数组实现双向栈
- 静态数组实现双向栈
- 【数据结构课程作业】双向栈
- 双向队列deque/栈stack
- 栈与队列->顺序栈,双向栈
- 双向栈的初始化,压栈,出栈
- 基于数组实现双向栈 c++
- C - Colorful Rainbows 解题报告 (双向栈)
- 用双向链表实现一个栈
- 栈,队列,单链表,双向链表
- PHP实现双向链表、栈
- 双向队列 和 栈的应用
- 数据结构-双向链表实现栈
- 数据结构——顺序栈,双向顺序栈,链栈
- 大话数据结构七:两栈共享存储空间(双向栈)
- android碎片知识点
- [Codeforces Round #369 (Div. 2) C. Coloring Trees] DP
- 11. Container With Most Water
- oracle常见错误
- HDOJ 1176 免费馅饼(完全背包)
- 3.21(双向栈)
- mysql 获取当前日期及格式化
- H264编码原理以及I,P,B帧
- ThinkPHP如何使用QQ登录?
- javascript获取节点
- 泛型 T 获取
- Android观察者模式NotificationCenter,可以试试替换BroadCastReceiver
- socket编程(3)—— UDP协议通信
- 砍柴人和放羊人的故事集