转载请注明出处:http://blog.csdn.net/ns_code/article/details/22312565
题目:
Describe how you could use a single array to implement three stacks.
翻译:
只用一个数组实现三个栈
思路:
用一个数组实现一个栈很容易,我们在Q3.1中也是用数组来模拟栈的。如果要用一个数组来实现三个栈,在压栈的时候,不管是哪个栈的push操作,直接将元素顺序压入到数组中,同时将本栈的栈顶索引指针指刚刚压入的元素即可,如下图所示(三种颜色分别代表三个栈,箭头指向每个栈的栈顶):
但在pop的时候,我们需要将栈顶指针向下移动,将其指向本栈中的下一个元素,这就需要在每个元素中加上一个指向本栈中下一个元素的索引。已让如上图所示,如果令最底部元素在数组中的位置需要为0,那么栈顶元素12所指的下一个元素的位置序号为9,即元素10,栈顶元素11所指向的下一个元素的位置序号为6,即元素7,而栈顶元素9所指向的下一个元素的位置序号为7,即元素8。这样,我们就需要将数组中的节点保存为如下结构:
typedef struct node { ElemType data; int next; //指向该栈的下一个元素,如果没有下一个元素,则设next为-1 }node;实现代码:
/**************************************************** 题目描述: 用一个数组实现三个栈 Date:2014-03-27 *****************************************************/ typedef int ElemType; #define MAX 100 //三个栈的总深度 #include<stdio.h> typedef struct node { ElemType data; int next; //指向该栈的下一个元素,如果没有下一个元素,则设next为-1 }node; /* 在该栈顶的索引指针为top时,向栈A中压入数据data count用来记录最上面的元素所在栈的栈顶位置 */ bool push(node *A,int &count,int &top,ElemType data) { if(count>=MAX-1 || count<-1 || top>count || top<-1) return false; count++; A[count].data = data; A[count].next = top; top = count; return true; } /* 在该栈顶索引指针为top时,出栈 count用来记录最上面的元素所在栈的栈顶位置 */ bool pop(node *A,int &count,int &top) { if(top<0 || top>count) return false; if(top == count) count--; A[top].data = -10; //这里为了便于观察pop后的情况,将出栈后的位置的元素设定为-10 top = A[top].next; return true; } int main() { int top1 = -1; int top2 = -1; int top3 = -1; int count = -1; node A[MAX]; push(A,count,top1,1); push(A,count,top2,2); push(A,count,top3,3); push(A,count,top1,4); push(A,count,top3,5); push(A,count,top3,6); push(A,count,top2,7); push(A,count,top1,8); int i; printf("After pushed:\n"); for(i=0;i<8;i++) printf("A[%d].data = %d,A[%d].next = %d\n",i,A[i].data,i,A[i].next); pop(A,count,top3); pop(A,count,top2); pop(A,count,top1); printf("After popd:\n"); for(i=0;i<8;i++) printf("A[%d].data = %d,A[%d].next = %d\n",i,A[i].data,i,A[i].next); return 0; }测试结果:
注:代码开源到我的Github:https://github.com/mmc-maodun/CareerCup
【CareerCup】Stacks and Queues—Q3.2,布布扣,bubuko.com
【CareerCup】Stacks and Queues—Q3.2
原文:http://blog.csdn.net/ns_code/article/details/22312565