#include <iostream>
#include<string.h>
#include<string.h>
static int n; //用于输入货架(货架即为栈)的大小
using namespace std;
//信息结构体
typedef struct /*Inform*/ //可以去掉Inform,在需要在结构体中定义结构体对象(指针)时不能去掉
{
string name;
int a;
}Inform;
typedef struct /*Inform*/ //可以去掉Inform,在需要在结构体中定义结构体对象(指针)时不能去掉
{
string name;
int a;
}Inform;
//栈的*顺序*结构体
typedef struct Node
{
Inform e;
struct Node *next;
}StackNode,*LinkStack;
typedef struct Node
{
Inform e;
struct Node *next;
}StackNode,*LinkStack;
//队列*链式*结构体
typedef struct QNode
{
Inform e;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct QNode
{
Inform e;
struct QNode *next;
}QNode,*QueuePtr;
//指向链式队列的头尾指针
typedef struct
{
QueuePtr fro;
QueuePtr rear;
}LinkQueue;
typedef struct
{
QueuePtr fro;
QueuePtr rear;
}LinkQueue;
void Found1(LinkStack &s); //货物上架
void Foundd(LinkQueue &d); //创建顺序队列
void TurnsZ1(LinkStack &s1,LinkQueue d); //对于前天未剩余(第一天)倒货
void TurnsZ2(LinkStack &s1,LinkStack s2,LinkStack s3); //对于前天有剩余倒货
void Print(LinkStack s1);
void Foundd(LinkQueue &d); //创建顺序队列
void TurnsZ1(LinkStack &s1,LinkQueue d); //对于前天未剩余(第一天)倒货
void TurnsZ2(LinkStack &s1,LinkStack s2,LinkStack s3); //对于前天有剩余倒货
void Print(LinkStack s1);
int main()
{
cout << "请输入每次上货的最大值\t";
cin >> n;
LinkStack s1,s2,s3;
s1=s2=s3=NULL; //是否有必要定义构造函数,即建立一个空栈 建立一个队列,使其头尾指针指向队列未存货物信息的空结点
LinkQueue d;
cout<<"第一天货物上架"<<endl;
Found1(s1); //输入货物信息
Foundd(d);
TurnsZ1(s1,d);
Print(s1);
cout<<"第二天货物上架"<<endl;
if(s1==NULL)
{
Found1(s1);
TurnsZ1(s1,d);
Print(s1);
}
else
{
Found1(s2);
TurnsZ2(s1,s2,s3);
Print(s1);
}
return 0;
}
{
cout << "请输入每次上货的最大值\t";
cin >> n;
LinkStack s1,s2,s3;
s1=s2=s3=NULL; //是否有必要定义构造函数,即建立一个空栈 建立一个队列,使其头尾指针指向队列未存货物信息的空结点
LinkQueue d;
cout<<"第一天货物上架"<<endl;
Found1(s1); //输入货物信息
Foundd(d);
TurnsZ1(s1,d);
Print(s1);
cout<<"第二天货物上架"<<endl;
if(s1==NULL)
{
Found1(s1);
TurnsZ1(s1,d);
Print(s1);
}
else
{
Found1(s2);
TurnsZ2(s1,s2,s3);
Print(s1);
}
return 0;
}
void Found1(LinkStack &s)
{
s=NULL; //定义一个空栈,s连接在p上,即p->next=NULL
Inform i;
i.name="";
cout<<"输入break表示停止输入:"<<endl;
while(1)
{
StackNode *p;
p=new StackNode;
cin>>i.name;
if(i.name=="break")
break;
cin>>i.a;
p->e=i;
p->next=s;
s=p;
}
}
{
s=NULL; //定义一个空栈,s连接在p上,即p->next=NULL
Inform i;
i.name="";
cout<<"输入break表示停止输入:"<<endl;
while(1)
{
StackNode *p;
p=new StackNode;
cin>>i.name;
if(i.name=="break")
break;
cin>>i.a;
p->e=i;
p->next=s;
s=p;
}
}
void Foundd(LinkQueue &q)
{
q.fro=q.rear=new QNode;
 
{
q.fro=q.rear=new QNode;