以下程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含点值和指向上一个节点的指针 prev;另一个类是栈类 stack, 它包含栈的头指针 top。 生成的链式栈如下图所示。 〈IMG onClick=over(this) title

admin2010-03-29  72

问题 以下程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含点值和指向上一个节点的指针 prev;另一个类是栈类 stack, 它包含栈的头指针 top。
生成的链式栈如下图所示。
〈IMG onClick=over(this) title=放大 src="tp/jsj/2jc++j28.1.gif"〉
下面是实现程序,请填空完成此程序。
   #include 〈iostream〉
   using namespace std;
   class stack;
   class node
   {
      int data;
      node *prev;
   public:
      node(int d, node *n)
      {
         data=d;
         prev=n;
      }
      friend class stack;
   };
   class stack
   {
      node *top; //栈头
   public:
      stack()
      {
         top=0;
      }
      void push(int i)
      {
         node *n=【  】;
         top=n;
      }
      int pop()
      {
         node *t=top;
         if (top)
         {
            top=top-〉prev;
            int c= t-〉data;
            delete t;
            return c;
         }
         return 0;
      }
      int main ()
      {
         stack s;
         s.push(6);
         s.push(3);
         s.push (1);
         return 0;
      }

选项

答案new node(i,top)

解析 本题考核友元类以及对象成员的应用,属于综合考题。本程序中定义了两个类node和stack,用于实现堆栈的压入和弹出操作。其中,类 stack是类node的友元类,这样类stack中的成员可以访问类node中的所有成员。在类node中,定义两个私有变量:整型变量data和对象指针prev。变量data用于保存节点的数值,而对象指针prey用于指向上一节点。在类node的构造函数中,形参是数据d和对象指针n。在类stack中,定义了一个私有变量,栈顶指针top,并在构造函数中赋值0(即指针为空)。
函数push()实现入栈操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这个节点的prev指针指向栈顶,即top。然后让top指针指向新的节点。所以在push()函数中应填入“node*n=new node(i,top)”。类stack中的pop()函数实现数据的弹出功能。先定义了一个对象指针t指向栈顶节点。然后判断堆栈是否为空,如果为空,则返回0,否则就弹出栈顶节点的值。那么应该先将栈顶指针后退一个节点,然后把对象t指针指向的节点值弹出,并删除节点t。
转载请注明原文地址:https://jikaoti.com/ti/txW0FFFM
0

最新回复(0)