在此基础上 https://blog.csdn.net/gny1106/article/details/88375403 补充;
**
基本操作:
**
栈:
顺序栈:
const int M=100;
template<class T>
class seqStack
{
public:
seqStack ();
~seqStack ();
void Push (T x);
T Pop ();
T GetTop ();
bool Empty ();
private:
T data[M];
int top;
}
入栈:
template<class T>
void seqStack<T>::Push (T x)
{
if (top==M-1) throw “溢出”;
top++;
data[top]=x;
}
出栈:
template<class T>
T seqStack<T>::Pop ()
{
if (top==-1) throw “溢出”;
x=data[top];
top--;
return x;
}
判断栈是否为空:
template<class T>
bool seqStack<T>::Empty ()
{
if (top==-1)
return true;
return false;
}
取栈顶元素:
template <class T>
T seqStack<T>::GetTop ()
{
if (Empty ()) throw ”空栈” ;
return data[top];
}
插入:
template <class T>
void BothStack<T>::Push (int i,T x)
{
if (top1==top2-1)
throw "上溢";
if (i==1)
data[++top1]=x;
if (i==2)
data[--top2]=x;
}
删除:
template <class T>
T BothStack<T>::Pop (int i){
if (i==1) {
if (top1==-1) throw "下溢";
return data[top1--];
}
if (i==2) {
if (top2==StackSize) throw "下溢";
return data[top2++];
}
}
析构:
template <class T>
LinkStack<T>::~LinkStack ()
{
while (top)
{
Node<T> *p;
p=top->next;
delete top;
top=p;
}
}
队列:
循环队列:
const int Q=100;
template <class T>
class CirQueue{
public:
CirQueue ();
~CirQueue ();
void EnQueue (T x);
T DeQueue ();
T GetQueue ();
bool Empty (){
if (rear==front) return true;
return false;
};
private:
T data[Q];
int front, rear;
};
入队:
template <class T>
void CirQueue<T>::EnQueue (T x)
{
if ((rear+1) % Q ==front) throw "上溢";
rear=(rear+1) % Q;
data[rear]=x;
}
出队:
template <class T>
T CirQueue<T>::DeQueue ()
{
if (rear==front) throw "下溢";
front=(front+1) % Q;
return data[front];
}
取队头元素:
template <class T>
T CirQueue<T>::GetQueue ()
{
if (rear==front) throw "下溢";
i=(front+1) % Q;
return data[i];
}
求长度:
template <class T>
int CirQueue<T>::GetLength ()
{
if (rear==front) throw "下溢";
len=(rear-front+ Q) % Q;
return len;
}
构造函数:
template <class T>
LinkQueue<T>::LinkQueue ()
{
front=new Node<T>;
front->next=NULL;
rear=front;
}
入队:
template <class T>
void LinkQueue<T>::EnQueue (T x)
{
s=new Node<T>;
s->data=x;
s->next=NULL;
rear->next=s;
rear=s;
}
出队:
template <class T>
T LinkQueue<T>::DeQueue ()
{
if (rear==front) throw "下溢";
p=front->next;
x=p->data;
front->next=p->next;
delete p;
if (front->next==NULL) rear=front;
return x;
}