首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,无头绪

2012-05-24 
求助,无头绪。是我基础不扎实,我就这么觉得。#ifndef _SQQUEUE_H_#define _SQQUEUE_H_template class ElemT

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

#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);

热点排行