关于c++新手
学了c++一年了~写程序总是很乱、很乱,虽说写出了程序,可是很混乱,而且很多的不足~
就像最近这道程序~
题目是:
停车场管理。设有一个可以停放n辆汽车的狭长停车场(先进后出),它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后依次从停车场最里面向大门口处停放(最先到达的第一辆车停放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车离开,则排在便道上的第一辆车就可以进入停车场。停车场内如有某辆车要离开,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车再按原来的次序进停车场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车没进停车场就要离开,允许其离开,不收停车费,并且仍然保持在便道上的车辆次序。试编程模拟停车场管理。
#include <iostream>
using namespace std;
const int Max=5;
struct CarData
{
CarData *next;
int carnum;
};
class Queue
{
public:
Queue();
~Queue();
void inqueue(int x);
int outqueue();
int queuesize();
CarData *pqueue();
private:
CarData *front,*rear,*head;
int length;
};
Queue::Queue()
{
head=new CarData;
head->next=NULL;
rear=front=head;
length=0;
}
Queue::~Queue()
{
}
void Queue::inqueue(int x)
{
CarData *s;
s=new CarData;
s->carnum=x;
s->next=NULL;
rear->next=s;
rear=s;
length++;
}
int Queue::outqueue()
{
CarData *p;
int x;
p=front->next;
if(p->next==NULL)
{
x=p->carnum;
front=rear;
delete p;
length--;
return x;
}
else
{
x=p->carnum;
front->next=p->next;
delete p;
length--;
return x;
}
}
int Queue::queuesize()
{
return length;
}
CarData *Queue::pqueue()
{
return head;
}
class TempStack
{
public:
TempStack();
~TempStack();
void instack(int x);
int outstack();
int stacksize();
int topstack();
private:
int TempStation[Max];
int top;
};
TempStack::TempStack()
{
top=-1;
}
TempStack::~TempStack()
{
}
void TempStack::instack(int x)
{
if(top==Max-1)
cout<<"临时车场已满!"<<endl;
else
{
top++;
TempStation[top]=x;
}
}
int TempStack::outstack()
{
if(top==-1)
cout<<"临时车场已空!"<<endl;
else
{
top--;
return TempStation[top+1];
}
}
int TempStack::topstack()
{
if(top==-1)
return 0;
else
return TempStation[top];
}
int TempStack::stacksize()
{
return top;
}
class Stack
{
public:
Stack();
~Stack();
void instack(int x);
int topstack();
int outstack();
int stacksize();
void outcar();
void printstack();
private:
int Station[Max];
int top;
Queue queue;
TempStack tempstack;
};
Stack::Stack()
{
top=-1;
}
Stack::~Stack()
{
}
void Stack::instack(int x)
{
if(top>=Max-1)
{
cout<<"停车场已满!"<<endl;
cout<<"接下来的车将被送入队列中!"<<endl;
queue.inqueue(x);
}
else
{
top++;
Station[top]=x;
}
}
int Stack::outstack()
{
if(top==-1)
cout<<"停车场已空!"<<endl;
else
{
top--;
return Station[top+1];
}
}
int Stack::topstack()
{
if(top==-1)
return -1;
else
return Station[top];
}
int Stack::stacksize()
{
return top;
}
void Stack::outcar()
{
int y;
cout<<"输入离开车牌号(0退出):";
cin>>y;
while(y!=0)
{
while(topstack()!=y&&topstack()>-1)
{
tempstack.instack(outstack());
}
if(topstack()==-1)
cout<<"停车场里没有该车牌号!"<<endl;
else
{
cout<<outstack()<<endl;
}
while(tempstack.stacksize()>=0)
instack(tempstack.outstack());
if(queue.queuesize()>0&&top<Max-1&&tempstack.stacksize()==-1)
instack(queue.outqueue());
printstack();
cout<<"输入离开车牌号(0退出):";
cin>>y;
}
}
void Stack::printstack()
{
if(top==-1)
cout<<"停车场空了!";
else
{
cout<<"停车场的车牌号有:"<<endl;
for(int i=top;i>-1;i--)
cout<<Station[i]<<' ';
}
cout<<endl;
CarData *i=queue.pqueue()->next;
if(!queue.queuesize())
cout<<"队列空了!";
else
{
cout<<"队列里的车牌号有:"<<endl;
while(i!=NULL)
{
cout<<i->carnum<<' ';
i=i->next;
}
}
cout<<endl;
}
void main()
{
Stack car1;
int x;
cout<<"输入车牌号(0退出):";
cin>>x;
while(x!=0)
{
car1.instack(x);
cout<<"输入车牌号(0退出):";
cin>>x;
}
car1.printstack();
car1.outcar();
}
求助高手~希望给点建议呀!!
谢谢啦~