大家看我哪错了啊
#ifndef STACK_H_
#define STACK_H_
#include<stdio.h>
struct StackNode
{
int data;
StackNode *next;
};
class Stack
{
private:
StackNode *top,*p,*q;
public:
Stack(){top=new StackNode;p=q=NULL;}
~Stack(){clear();delete top;}
void push(int e);
int pop();
bool getTop(int &e);
void clear();
bool isEmpty(){return top==NULL;}
};
#endif
#include"stack.h"
#include<iostream>
void Stack::push(int e)
{
p=new StackNode;
p->data =e;
p->next =top->next ;
top->next =p;
}
int Stack::pop()
{
if(isEmpty())
return 0;
int e;
q=new StackNode;
q=top->next;
e=q->data ;
top->next =q->next;
delete q;
return e;
}
bool Stack::getTop(int &e)//此处不能为const int &e,否则不能将top->next->data赋给常量
{
if(isEmpty())
return false;
e=top->next ->data;
return true;
}
void Stack::clear()
{
StackNode *p=top->next;
while(top->next !=NULL)
{
top->next =p->next ;
delete p;
p=top->next;
}
}
#include"stack.h"
#include<iostream>
using namespace std;
#define UP -1
#define DOWN 1
#define RIGHT 1
#define LEFT -1
int a[7][7];
void initMaze();
int getnum(int i,int j);
int main()
{
Stack s;
int x,y,z,flat;
initMaze();
int i=1;
int j=1;
s.push(getnum(i,j));
while(a[i][j]!=2) //当没到出口a[5][5]时进行循环操作
{
if(a[i][j+RIGHT]==0)
{
s.push (getnum(i,j+RIGHT));
a[i][j+RIGHT]=1; 走过的路被设置为1,以防重复走已经走过得路,退出用pop()
j=j+1;
}
else
if(a[i+UP][j]==0)
{
s.push (getnum(i+UP,j));
a[i+UP][j]=1;
i=i-1;
}
else
if(a[i+DOWN][j]==0)
{
s.push (getnum(i+DOWN,j));
a[i+DOWN][j]=1;
i=i+1;
}
else
if(a[i][j+LEFT]==0)
{
s.push (getnum(i,j+LEFT));
a[i][j+LEFT]=1;
j=j-1;
}
else
{
flat=s.pop (); //不通时出栈
flat=s.pop (); //再出栈一次
i=flat/10; //获得下标
j=flat%10;
s.push (getnum(i,j)); //入栈
}
}
cout<<"出迷宫的路线是: "<<endl;
while(!s.isEmpty ())
{
x=s.pop();
y=x/10;
z=x%10;
cout<<"("<<y<<" , "<<z<<")"<<"<--";
}
cin.get();
return 0;
}
void initMaze()
{
int i,j;
for(i=0;i<7;i++)
for(j=0;j<7;j++)
a[i][j]=0;
for(i=0;i<7;i++)
a[i][0]=a[i][6]=1;
for(j=0;j<7;j++)
a[0][j]=a[6][j]=1;
a[1][2]=a[2][4]=a[1][4]=a[3][1]=a[4][3]=a[4][5]=a[5][2]=1; //墙壁标志为1
for(i=0;i<7;i++)
{
for(j=0;j<7;j++)
if(a[i][j]==1)
cout<<" * ";
else
cout<<" O ";
cout<<endl;
}
a[5][5]=2; // 出口
a[1][1]=1; //入口
}
int getnum(int i,int j) //将数组下标转为十进制
{
int c=i*10+j;
return c;
}
//测试部分
/* s.push(1);
s.push (2);
s.push(3);
cout<<s.pop();
cout<<s.pop ();
cout<<s.pop ();
cin.get();
return 0;
}*/
大家看我哪里错了啊,测试部分可以用地