用C++语言编写一个栈的类模板希望能够把要求的都实现出来谢谢。不好意识没财富了哪位好心帮写下下回补上。

以下是一个整数栈类的定义:classStack{public:Stack(intsize);~Stack(){delete[]stack;}voidpush(inti);... 以下是一个整数栈类的定义:
class Stack
{
public:
Stack(int size);
~Stack(){delete []stack;}
void push(int i);
private:
int tos,length;
int*stack;
};
编写一个栈的类模板(包括其成员函数定义),以便为任何类型的对象提供栈结构数据操作。在应用程序中创建整数栈、字符栈和浮点数栈,并提供一些数据供进栈、退栈和打印操作。
展开
 我来答
十步天下
2011-12-04 · TA获得超过287个赞
知道小有建树答主
回答量:214
采纳率:100%
帮助的人:249万
展开全部
用数组作为储存结构的顺序栈
#include<iostream>
#include<assert.h>
using namespace std;
const int INCREMENT = 20;

template <class T>
class SeqStack
{
public:
SeqStack(int size = 50);
~SeqStack();
void Push(T x);
bool Pop(T& e);
bool IsEmpty();
bool IsFull();
int Length();
bool getTop(T& x);
void MakeEmpty();
void Output();
private:
T* elements;
int top;
int maxSize;
void overflowProcess();
};

template <class T>
SeqStack<T>::SeqStack(int sz)
{
top = -1;
maxSize = sz;
elements = new T[maxSize];
assert(elements != NULL);
}

template <class T>
SeqStack<T>::~SeqStack()
{
delete []elements;
}

template <class T>
void SeqStack<T>::Push(T x)
{
if(IsFull())
{
overflowProcess();
}
elements[++top] = x;
}

template <class T>
bool SeqStack<T>::Pop(T &e)
{
if(IsEmpty())
{
return false;
}
else
{
e = elements[top--];
return true;
}
}

template <class T>
bool SeqStack<T>::IsEmpty()
{
if(top == -1)
return true;
return false;
}

template <class T>
bool SeqStack<T>::IsFull()
{
if(top == maxSize -1)
{
return true;
}
return false;
}

template <class T>
bool SeqStack<T>::getTop(T &x)
{
if(IsEmpty())
{
return false;
}
x = elements[top];
}

template <class T>
int SeqStack<T>::Length()
{
return (top+1);
}

template <class T>
void SeqStack<T>::MakeEmpty()
{
top = -1;
}

template <class T>
void SeqStack<T>::overflowProcess()
{
T* newElems = new T[maxSize+INCREMENT];
if(newElems == NULL)
{
cerr << "Memory allocate error!" << endl;
exit(1);
}
for(int i=0;i<=top;i++)
{
newElems[i] = elements[i];
}
maxSize = maxSize + INCREMENT;
delete []elements;
elements = newElems;
}

template <class T>
void SeqStack<T>::Output()
{
int i = 0;
if(!IsEmpty())
{
cout << "---top---" << endl;
for(i=top;i>=0;i--)
{
cout << elements[i] << endl;
}
cout << "---base---" << endl;
}
}

/*int main()
{
SeqStack<int> s;
int i=0;
int e;
for(;i<60;i++)
{
s.Push(i*2);
}
cout << "length:" << s.Length() << endl;
s.Output();
return 0;
}*/

用链表作为储存结构的链式栈
#include<iostream>
#include<assert.h>
using namespace std;
const int INCREMENT=20;

template <class T>
class StackNode
{
public:
StackNode(T _data,StackNode<T> *link = NULL)
{
data = _data;
next = link;
}
StackNode(StackNode<T> *link = NULL)
{
next = link;
}
StackNode<T> *next;
T data;
private:
};

template <class T>
class LinkStack
{
public:
LinkStack(){top = NULL;}
~LinkStack(){makeEmpty();}
bool isEmpty(){return (top == NULL);}
bool push(T x);
bool pop(T &x);
int getSize();
bool getTop(T &e);
void outPut();
void makeEmpty();
private:
StackNode<T>* top;
};

template <class T>
void LinkStack<T>::makeEmpty()
{
StackNode<T> *p;
while(top!=NULL)
{
p = top;
top = top->next;
delete p;
}
}

template <class T>
bool LinkStack<T>::push(T x)
{
StackNode<T> *e = new StackNode<T>(x);
if(!e)
{
cerr << "Memory allocate error!" << endl;
return false;
}
e->next = top;
top = e;
return true;
}

template <class T>
bool LinkStack<T>::pop(T &x)
{
if(!isEmpty())
{
x = top->data;
StackNode<T> *e = top;
top = top->next;
delete e;
return true;
}
return false;
}

template <class T>
bool LinkStack<T>::getTop(T &x)
{
if(!isEmpty())
{
x = top->data;
return true;
}
return false;
}

template <class T>
int LinkStack<T>::getSize()
{
StackNode<T> *p = top;
int count = 0;
while(p!=NULL)
{
count++;
p = p->next;
}
return count;
}

template <class T>
void LinkStack<T>::outPut()
{
StackNode<T> *p = top;
cout << "---top---" << endl;
while(p!=NULL)
{
cout << p->data << endl;
p = p->next;
}
cout << "---base---" << endl;
};

/*int main()
{
LinkStack<char> s;
char e;
int a = 65;
for(int i=0;i<5;i++)
{
s.push(char(a+i));
}
s.outPut();
s.makeEmpty();
s.outPut();
for(int i=0;i<6;i++)
{
s.pop(e);
cout << s.getSize()<< endl;
s.outPut();
}
return 0;
}*/
追问
这个要hi吧栈的定义改成我题目那样的可以吗?那下面的要怎样改下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式