1 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
下邊都是我自己寫的,都是經(jīng)過編譯的,調(diào)試用的main函數(shù)給注釋掉了
不過遺憾是沒有寫注釋,不過函數(shù)名字見名知意,希望你會(huì)滿意。
用數(shù)組作為儲(chǔ)存結(jié)構(gòu)的順序棧
#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;
}*/
用鏈表作為儲(chǔ)存結(jié)構(gòu)的鏈?zhǔn)綏?br/>#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;
}*/
- 1 回答
- 0 關(guān)注
- 128 瀏覽
添加回答
舉報(bào)