算法练习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);
}
定义栈的数据结构,要求添加一个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);
}
相关文章推荐
- 【Top】今天开始写关于July的博客的数据结构和算法练习
- 关于算法练习1.1中的中参数传递方式思考
- 算法练习(8) —— 动态规划
- 算法-第四版-练习1.3.19解答
- 分享一个网站,里面有一些关于编程的题,上去练习下不错
- 关于链表的算法..对于july大神的文章的学习笔记
- 算法(Algorithms)第4版 练习 1.5.23
- 算法-第四版-练习1.2.10解答
- 算法导论 6章堆排序的代码实现和部分课后练习
- 从头开始学算法:考研机试题练习(C/C++)–算法初步
- Neural Networks and Deep Learning之中文翻译-关于练习与问题
- 关于通过标签取得相关文章的算法
- 关于日期的常用算法
- nowcoder 2018年全国多校算法寒假训练营练习比赛(第三场)- 大水题
- 关于软件开发人员加强自我学习、练习的倡议
- [算法练习] UVA-401-Palindromes
- 关于MRu算法的实现研究
- 算法 练习1.2
- 关于LRU算法
- 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)