读书人

无头绪

发布时间: 2012-05-24 11:55:41 作者: rapoo

求助,无头绪。
是我基础不扎实,我就这么觉得。

#ifndef _SQQUEUE_H_
#define _SQQUEUE_H_

template <class ElemType>//声明一个类模板
class SqQueue
{
public: //顺序类的各成员函数
SqQueue(int m = 100);
~SqQueue();
void Clear();
bool Empty() const;
int Length() const;
ElemType & GetHead() const;
ElemType & GetLast() const;
void Append(const ElemType &e);
void Remove();
private: //顺序类的数据成员
ElemType *m_base; //基地址指针
int m_front; //队头指针
int m_rear; //队尾指针
int m_size; //向量空间大小
};

//构造函数,分配m个结点的顺序空间,构造一个空的顺序队列。
template <class ElemType>
SqQueue <ElemType>::SqQueue(int m)
{
m_front = m_rear = 0;
m_base = new ElemType[m];
m_size = m;
}//SqQueue

//析构函数,将队列结构销毁。
template <class ElemType>
SqQueue <ElemType>::~SqQueue()
{
delete[] m_base;
}//~SqQueue

//清空队列。
template <class ElemType>
void SqQueue <ElemType>::Clear()
{
m_front = m_rear = 0;
}//Clear

//判队列是否为空,若为空,则返回true,否则返回false。
template <class ElemType>
bool SqQueue <ElemType>::Empty() const
{
return m_front == m_rear;
}//Empty

//求队列的长度。
template <class ElemType>
int SqQueue <ElemType>::Length() const
{
return (m_rear - m_front + m_size) % m_size;
}//Length

//取队头元素的值。先决条件是队列不空。
template <class ElemType>
ElemType & SqQueue <ElemType>::GetHead() const
{
return m_base[m_front];
}//GetHead

//取队尾元素的值。先决条件是队列不空。
template <class ElemType>
ElemType & SqQueue <ElemType>::GetLast() const
{
return m_base[(m_rear - 1 + m_size) % m_size];
}//GetLast

//入队,插入e到队尾。
template <class ElemType>
void SqQueue <ElemType>::Append(const ElemType &e)
{
int j, k;
if (m_front == (m_rear + 1) % m_size) { //队满,则扩展空间。
ElemType *newbase;
newbase = new ElemType[m_size + 10];
for(j = m_front, k = 0; j < m_rear; j = (j + 1) % m_size, k++)
newbase[k] = m_base[j];
delete[] m_base;
m_base = newbase;
m_front = 0;
m_rear = k;
m_size += 10;
}
m_base[m_rear] = e;
m_rear = (m_rear + 1) % m_size;
}//Append

//出队。先决条件是队列不空。
template <class ElemType>
void SqQueue <ElemType>::Remove()
{
m_front = (m_front + 1) % m_size;
}//Remove

#endif



#ifndef _LINKSTACK_H_
#define _LINKSTACK_H_

// 链栈结点
template <class ElemType>
struct LinkNode
{
ElemType data;
LinkNode<ElemType> *next;
};

//链栈类
template <class ElemType>
class LinkStack
{
public:
LinkStack();
~LinkStack();
void Clear();
bool Empty() const;
int Length() const;
ElemType & Top () const;
void Push(const ElemType&);
void Pop();
private:
LinkNode<ElemType> *m_top;
};

//构造函数,构造一个空的链栈。
template <class ElemType>
LinkStack <ElemType>::LinkStack()
{
m_top = NULL;
}//LinkStack

//析构函数,将栈结构销毁。
template <class ElemType>
LinkStack <ElemType>::~LinkStack()
{
Clear(); //成员函数Clear()的功能是释放链栈中的所有结点
}//~LinkStack

//判栈是否为空,若为空,则返回true,否则返回false。
template <class ElemType>
bool LinkStack <ElemType>::Empty() const
{
return m_top == NULL;
}//Empty



//将栈清空。
template <class ElemType>
void LinkStack <ElemType>::Clear()
{
LinkNode < ElemType > *p;
while (m_top != NULL) {
p = m_top;
m_top = m_top->next;
delete p;
}
}//Clear

//求栈的长度,返回栈中元素个数。
template <class ElemType>
int LinkStack <ElemType>::Length() const
{
int i = 0;
LinkNode < ElemType > *p = m_top;
while (p != NULL) {
i++;
p = p->next;
}
return i;
}//Length

//取栈顶元素的值。先决条件是栈不空。
template <class ElemType>
ElemType & LinkStack <ElemType>::Top() const
{
return m_top->data;
}//Top

//入栈。
template <class ElemType>
void LinkStack <ElemType>::Push(const ElemType &e)
{
LinkNode < ElemType > *p;
p = new LinkNode <ElemType>;
p->data = e;
p->next = m_top;
m_top = p;
}//Push

//出栈。先决条件是栈不空。
template <class ElemType>
void LinkStack <ElemType>::Pop()
{
LinkNode < ElemType > *p = m_top;
m_top = m_top->next;
delete p;
}//Pop

#endif



==========上面是默认的========

#include<iostream.h>
#include"LinkStack.h"
#include"SqQueue.h"

//using namespace std;

void translate1(SqQueue<char> *lx)//
{
char temp,contemp;
LinkStack<char> lm;
SqQueue<char> ly;
while(!lx->Length())
{
temp=lx->GetHead();
if(temp!='(' && temp!=')')
{
ly.Append(temp);
lx->Remove();
}
if(temp=='(')
{
lx->Remove();
contemp=lx->GetHead();
lm.Push(contemp);
lx->Remove();
temp=lx->GetHead();
if(temp!=')')
{
do
{
lm.Push(temp);
lm.Push(contemp);
lx->Remove();
temp=lx->GetHead();
}
while((temp==')'));
while(lm.Length!=0)
{
ly.Append(lm.Top());
lm.Pop();
}

}

}
}

//fanyi2 jinqu
while (ly.Length()!=0)
{
temp=ly.GetHead();
if(temp!='A'&&temp!='B')
switch(temp)
{
case 'e':cout<<"鹅";break;
case 'a':cout<<"一只";break;
case 's':cout<<"上";break;
case 'd':cout<<"地";break;
case 't':cout<<"天";break;
case 'z':cout<<"追";break;
case 'g':cout<<"赶";break;
case 'x':cout<<"下";break;
case 'n':cout<<"蛋";break;
case 'h':cout<<"恨";break;
default :cout<<"?";break;
}
else
{
if(temp=='A')
cout<<"上一只鹅";
else cout<<"天上一只鹅地上一只鹅";
}

}

}









int main()
{

void translate1(SqQueue<char>*);
SqQueue<char> la1(10);
char n;
cout<<"===translate monster's word=="<<endl<<endl;
cout<<"输入魔王的语言:"<<endl;
cin>>n;
while(n!='0') //循环输入
{
la1.Append(n);
cin>>n;
}

translate1(la1);


/*error C2664: 'translate1' : cannot convert parameter 1 from 'class SqQueue<char>' to 'class SqQueue<char> *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called*/
return 0;
}






[解决办法]
void translate1(SqQueue<char>*);的参数是SqQueue<char>*类型,你调用的时候给的参数是SqQueue<char>类型,所以出现错误。
将translate1(la1);改为translate1(&la1);试一下。

希望能够帮到你!
[解决办法]
根据错误提示啊:
函数申明:void translate1(SqQueue<char> *lx)//
函数调用:translate1(la1); //
改成translate1(&la1);

读书人网 >C++

热点推荐