请熟悉c的大侠指教一下(80分)

  • 主题发起人 主题发起人 archonwang
  • 开始时间 开始时间
A

archonwang

Unregistered / Unconfirmed
GUEST, unregistred user!
一个关于出入堆栈的程序,我不会写,能有哪位给段代码程序学习一下?(简单点的就行)谢谢
 
什么意思?
是自己模仿写一个还是利用现有的栈?
如果是利用现有的话,在高级语言中一般不会直接操作栈的。但也可以通过嵌入汇编来自己写;如果是模仿写一个到是很简单,你可以利用一个数组来实现的。
 
var
StackTop: Integer;
//栈顶位置
StackData: array[0..100] of Integer;
begin
StackTop = 0;
//入栈
StackData[StackTop] := Value;
StackTop := StackTop + 1;
//出栈
if StackTop > 0 then
begin
StackTop := StackTop - 1;
Value := StackData[StackTop];
end
else
栈已空
 
to 晶晶:
是要模仿写一个
用楼上的可以吗?
我已经大概有3年多没碰过c了,都还给老师了
 
写一个例子给你,没有到delphi上实验,你自己先看看有没有问题,但可以说明原理的。
全局变量:
stack:array[0..125]of dword;
stacksp:dword;//相当于栈顶指针
在初始化的时候:
stacksp:=126;
进栈函数:
procedure push(const value:integer);
begin
dec(stacksp,1);
if stacksp<0 then
raise;//栈溢出
stack[stacksp]:=value;
end;

出栈函数:
procedure pop(var value:integer);
begin
if stacksp>125 then
raise;//栈溢出
value:=stack[stacksp];
inc(stacksp,1);
end;
 
一个例子
#include <iostream.h>
#include <vector>
using namespace std;
class iStack
{
public:
iStack(int capacity) :_stack(capacity),_top(0) {}
bool pop(int &amp;value);
bool push(int value);
bool full();
bool empty();
void display();
int size();
private:
int _top;
vector<int> _stack;
};
inline int iStack::size()
{
return _top;
}
inline bool iStack::empty()
{
return _top ? false:true;
}
inline bool iStack::full()
{
return _top<_stack.size()-1 ? false:true;
}
bool iStack::pop(int &amp;top_value)
{
if (empty())
return false;
top_value=_stack[--_top];
cout << "iStack::pop(): " << top_value << endl;
return true;
}
bool iStack::push(int value)
{
cout << "iStack::push( " << value << " )/n";
if (full())
return false;
_stack[_top++]=value;
return true;
}
void iStack::display()
{
if (!size())
{
cout << "( 0 )/n";
return;
}
cout << "( " << size() << " ) ( bot: ";
for (int ix=0;
ix<_top;
++ix)
cout << _stack[ix] << " ";
cout << " :top )/n";
}
//---------------------------------------
int main()
{
iStack stack(32);
stack.display();
for (int ix=1;
ix<51;
++ix)
{
if (ix%2==0)
stack.push(ix);
if (ix%5==0)
stack.display();
if (ix%10==0)
{
int dummy;
stack.pop(dummy);
stack.pop(dummy);
stack.display();
}
}
return 0;
}
 
多人接受答案了。
 
后退
顶部