您的位置:首页 > 其它

算法练习2(关于栈)

2013-11-20 21:40 148 查看
2.设计包含min函数的栈。

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。

要求函数min、push以及pop的时间复杂度都是O(1)。

#include<stdio.h>

#define Stack_Size 50

#define TRUE 1

#define FALSE 0

typedef struct

{

int elem[Stack_Size];

int top;

}SeqStackA,SeqStackB;

void InitStack(SeqStackA *A,SeqStackA *B)

{

A->top=-1;

B->top=-1;

}

int Push(SeqStackA *sa,SeqStackA *sb,int x)

{

if(sa->top==Stack_Size-1)

return(FALSE);

sa->top++;

sa->elem[sa->top]=x;

printf("A is %d",sa->elem[sa->top]);

if((sa->elem[sa->top] < sb->elem[sb->top]) || sa->top==0)

{

sb->top++;

sb->elem[sb->top]=sa->elem[sa->top];

}

else

{

sb->top++;

sb->elem[sb->top]=sb->elem[sb->top-1];

}

printf(" B is %d\n",sb->elem[sb->top]);

return(TRUE);

}

int Pop(SeqStackA *sa,SeqStackA *sb)

{

if(sa->top==-1 || sb->top==-1)

return(FALSE);

else

{

printf("A is %d B is %d\n",sa->elem[sa->top],sb->elem[sb->top]);

sa->top--;

sb->top--;

return(TRUE);

}

}

int min(SeqStackA *sa,SeqStackA *sb)

{

if(sa->top==-1 || sb->top==-1)

return(FALSE);

else

return(sb->elem[sb->top]);

}

int main()

{

SeqStackA seqA;

SeqStackB seqB;

InitStack(&seqA,&seqB);

printf("push:\n");

Push(&seqA,&seqB,2);

Push(&seqA,&seqB,4);

Push(&seqA,&seqB,6);

Push(&seqA,&seqB,1);

Push(&seqA,&seqB,5);

printf("pop:\n");

for(int i=0;i<5;i++)

Pop(&seqA,&seqB);

return(TRUE);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: