| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:一道关于堆栈的问题·!(已经用c++语言编译出来了)
只看楼主 加入收藏
两个人的笨笨
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-3-29
收藏
 问题点数:0 回复次数:3 
一道关于堆栈的问题·!(已经用c++语言编译出来了)
利用堆栈写下列的算法:

当m*n=0时, f(m,n)=m+n+1;
当m*n!=0时,f(m,n)=f(m-1,f(m,n-1))

用C++编程~!!!

谢谢各位!!

[此贴子已经被作者于2006-4-9 16:20:35编辑过]

搜索更多相关主题的帖子: 堆栈 语言 编译 
2006-04-02 15:31
两个人的笨笨
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-3-29
收藏
得分:0 

我自己做出来了!!
#include<iostream>
using namespace std;
#define NULL 0

class stacknode
{
private:
int data;
stacknode* link;
public:
stacknode(int item,stacknode*next=NULL){data=item;link=next;}
friend class stack;
};

class stack
{
private:
stacknode* top;
public:
stack(){top=NULL;}
void push(int item);
void pop(int &m);//弹出栈顶元素,并将该元素的值赋给m
bool IsEmpty(){return top==NULL;}
~stack();
};

stack::~stack()
{
stacknode* p;
while(top!=NULL)
{
p=top;
top=top->link;
delete p;
}
}

void stack::push(int item)
{
stacknode* p=new stacknode(item,top);
top=p;
}

void stack::pop(int &m)
{
m=top->data;
stacknode* p=top;
top=top->link;
delete p;
}

int function(int mm,int nn)
{
stack f;
int m=mm;
int n=nn;
while(!f.IsEmpty()||m*n!=0)
if(m*n==0) //
{
n=m+n+1;
f.pop(m);
}
else
{
f.push(m-1); //若m*n!=0,则函数继续向后展开
n=n-1;
}
return m+n+1;
}

void main()
{
cout<<function(2,1)<<endl;
}

2006-04-09 16:18
两个人的笨笨
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-3-29
收藏
得分:0 

还有一种方法::(现发过来,希望能帮助其他人)
#include<iostream>
using namespace std;

int function1(int m,int n)
{
int top=-1;
int stack[100];
stack[++top]=m;stack[++top]=n;
while(top>0)
if(stack[top-1]*stack[top]==0)
{
stack[top-1]=stack[top-1]+stack[top]+1;
top--;
}
else
{
stack[top+1]=stack[top]-1;
stack[top]=stack[top-1];
stack[top-1]=stack[top-1]-1;
top++;
}
return stack[top];
}

void main()
{
cout<<function1(1,2)<<endl;
}

2006-04-09 16:19
stnlcd
Rank: 1
等 级:新手上路
帖 子:177
专家分:1
注 册:2004-11-21
收藏
得分:0 

楼主的有点麻烦,给个更简便的非递归算法:[CODE]
#include <stdio.h>

int f(int m,int n) { /*递归形式*/
if(m*n) return f(m-1,f(m,n-1));
return m+n+1;
}

int fd(int m,int n) { /*非递归形式(用while-if形式实现)*/
int s[5000],i=0;
while(m*n||i) {
if(m*n) s[i++]=m,--n;
else if(i) n=m+n+1,m=s[--i]-1;
}
return m+n+1;
}

main() {
printf("f:%d,fd:%d\n",f(3,4),fd(3,4));

}




[/CODE]


要让一个男人破产,请给他一架相机,要让一个男人倾家荡产,请给他一架望远镜。
2006-04-10 13:12
快速回复:一道关于堆栈的问题·!(已经用c++语言编译出来了)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045088 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved