1:考点:编程实现下面的stack,并根据stack完成queue的操作
class MyStack
{
void push(data);
void pop(&data);
bool isEmpty();
}
代码如下:
#include "stdafx.h" #include<malloc.h> #include <iostream> #include <assert.h> using namespace std; /*单链表的节点,data表示节点的数据域,next指向下一个节点*/ class MyData { public: MyData() :data(0), next(NULL) {};//默认构造函数,这样表示后,主体中不用再写这个函数了 MyData(int value) :data(value), next(NULL) {};//带参数的构造函数 int data;//数据域 MyData *next;//下一个节点 }; /*表示栈的定义,其中public成员top表示栈顶,由于不能直接操作栈底,因此这里没有定义栈底的指针。 在默认构造函数中,把栈顶指针top置空,表示此时栈为空栈。*/ class MyStack { public: MyStack() :top(NULL) {};//默认构造函数 void push(MyData data);//进栈 void pop(MyData *pData);//出栈 bool IsEmpty();//是否为空栈 MyData *top;//栈顶 }; //进栈 void MyStack::push(MyData data) { MyData *pData = NULL; pData = new MyData(data.data);//生成新节点 pData->next = top; top = pData; /*---测试---*/ //cout << "栈顶地址:" << top << endl; //cout << "栈顶地址中的内容:" << top->data << endl; /*---*/ } //判断栈是否为空 bool MyStack::IsEmpty() { return(top == NULL);//如果top为空,则返回1,否则返回0 } //出栈 void MyStack::pop(MyData *data)//将删除的节点保存到data中 { if (IsEmpty())//如果栈为空,直接返回 { return; } data->data = top->data;//给传出的参数赋值 MyData *p = top;//临时保存原栈顶节点 top = top->next;//移动栈顶,指向下一个节点 delete p;//释放原栈顶节点内存 } int main() { MyData data(0);//定义一个节点,使用带参数的构造函数 MyStack s;//定义一个栈结构 s.push(MyData(1)); s.push(MyData(2)); s.push(MyData(3)); s.pop(&data);//第一次出栈,并且将删除的节点的数据保存到data参数中 cout << "pop" << data.data << endl; s.pop(&data);//第二次出栈,并且将删除的节点的数据保存到data参数中 cout << "pop" << data.data << endl; s.pop(&data);//第三次出栈,并且将删除的节点的数据保存到data参数中 cout << "pop" << data.data << endl; cout << "Empty=" << s.IsEmpty() << endl;//打印判空 return 0; }
运行结果: