//商品货架管理系统,这个是自己刚学完数据结构写的书的一个实验,写的很多,不够简洁,//其实里面也没什么东西,优先级队列之类的也没有用着,就是拿队列进行了个存储和排序//不过是自己初学写出来的,鼓励下自己。O(∩_∩)O~拿来在大家面前献丑了。//各位大哥大姐可以指教,留言本人百度ID,或者发邮件至:hsustar@foxmail.com,共同交//流讨论,共同进步。PS:本人就学于东秦,若能给本校学子们提供帮助,实属莫大荣幸。//不过高手也不要笑话咱啊。嘿嘿,进入主题吧。//头文件structQueue{//定义一个队列int*Qlist;intmaxsize;intrear,front;};voidInitQueue(Queue&QL,constintms);//初始化voidClearQueue(Queue&QL);//清空队列intQueueEmpty(Queue&QL);//判队空intQueueFull(Queue&QL);//判队满boolInsertQueue(Queue&QL,constint&item);//插入新元素进队voidOrderQueue(Queue&QL);//按大小顺序排队intDeQueue(Queue&QL);//出队列structstack{//定义一个栈int*Slist;inttop;intMaxsize;};voidInitstack(stack&SL,constintMS);//栈初始化boolStackempty(stack&SL);//判栈空boolStackfull(stack&SL);//栈满voidClearstack(stack&SL);//清空栈intPush(stack&SL,int&item);//新元素推进栈intPop(stack&SL);//出栈voidTraverstack(stack&SL);//输出栈中元素----------------------------------//实现文件#includeiomanip.h#includestdlib.h#includesy3.hvoidInitQueue(Queue&QL,constintms)//初始化队列{QL.Qlist=newint[ms];if(!QL.Qlist){cerr给队列分配内存失败。endl;exit(1);}QL.rear=0;QL.front=0;QL.maxsize=ms;//各项值,初始化}voidClearQueue(Queue&QL){QL.front=QL.rear=0;}//清空队列intQueueEmpty(Queue&QL){returnQL.rear==QL.front;}//判空intQueueFull(Queue&QL){return(QL.rear+1)%QL.maxsize==QL.front;}//判满boolInsertQueue(Queue&QL,constint&item)//插入元素进队{if(QueueFull(QL)){cerrQueueisfullendl;exit(1);}if(QL.rearQL.maxsize)//尾指针不能超过maxsize{QL.Qlist[QL.rear]=item;QL.rear=(QL.rear+1)%QL.maxsize;}returntrue;}voidOrderQueue(Queue&QL)//大小顺序排队{if(QueueEmpty(QL)){coutQueueisemptyendl;exit(1);}inti,j,item;for(i=0;iQL.rear;i++){for(j=i;jQL.rear;j++)if(QL.Qlist[i]QL.Qlist[j]){item=QL.Qlist[i];QL.Qlist[i]=QL.Qlist[j];QL.Qlist[j]=item;}}}intDeQueue(Queue&QL)//出队{inttemp;if(QueueEmpty(QL)){coutQueueisemptyendl;exit(1);}temp=QL.Qlist[QL.front];QL.front=(QL.front+1)%QL.maxsize;returntemp;}voidInitstack(stack&SL,constintMS)//栈的初始化{SL.Slist=newint[MS];if(!SL.Slist){cout给栈分配内存失败。endl;exit(1);}SL.Maxsize=MS;SL.top=-1;}boolStackempty(stack&SL)//判空{returnSL.top==-1;}boolStackfull(stack&SL)//判满{returnSL.top==SL.Maxsize;}voidClearstack(stack&SL)//清空栈{SL.top=-1;}intPush(stack&SL,int&item)//元素进栈{if(Stackfull(SL))returnfalse;SL.top++;SL.Slist[SL.top]=item;returnSL.Slist[SL.top];}intPop(stack&SL)//元素出栈{if(Stackempty(SL))returnfalse;returnSL.Slist[SL.top--];}voidTraverstack(stack&SL)//输出栈{for(inti=0;i=SL.top;i++)coutSL.Slist[i]endl;coutendl;}------------------------------------//主程序文件#includeiostream.h#includestdlib.h#includesy3.hconstintM=11;constintN=10;voidmain(){cout---------------商品货架管理----------------endl;Queueq;InitQueue(q,M);//队列初始化inti,t,temp,x;/用于存储最大值,执行循环,输入的变量cout按照连续的年月日的格式输入2010年1月1日至今的10个日期endl;cout如:2010年10月1日,输入20101001:endl;for(i=0;i10;i++)//输入十个日期{cinx;if(x20100101&&x20101124)InsertQueue(q,x);else{cout日期不合理。请重新输入:endl;cinx;}}OrderQueue(q);//将输入的日期排队temp=q.Qlist[0];//存储最大(近)的日期stacks;Initstack(s,N);//栈初始化for(i=0;i10;i++)/将排序后的队列推进栈{x=DeQueue(q);Push(s,x);}cout商品已经按照日期从近到远的时间顺序放入货架。从底部到顶部的顺序为:endl;Traverstack(s);//从底到顶,显示栈元素cout请输入要取商品的数量:endl;cinx;while(x0&&x10){cout要求的商品数量不合理,请重新输入:endl;cinx;}for(i=0;ix;i++)//取x件商品{cout取出的商品生产日期有:Pop(s)endl;}ClearQueue(q);//清空队列t=s.top;for(i=0;i=t;i++)//将取元素后的栈全部进队列{x=Pop(s);InsertQueue(q,x);}t=q.maxsize-q.rear-1;cout现在货架还能放下t件商品endl;cout请输入要放入货架的在temp之后的新商品日期:endl;for(i=q.rear;iq.maxsize-1;i++)//新商品进队列{cinx;if(xtemp&&x20101124)InsertQueue(q,x);else{cout商品时间太旧,请重新输入:endl;cinx;}}OrderQueue(q);//新旧商品日期排序for(i=0;is.Maxsize;i++)//排序后的商品进栈{x=DeQueue(q);Push(s,x);}cout新商品已经存入货架,从底部到顶部商品的日期为:endl;Traverstack(s);/显示放入新商品后栈元素顺序}//你也可以加一个today变量,输入today的日期,取代20101124,使程序看上去更人性化运行结果:最后部分有三行没有显示完全,在后面的图片里有补全,可以对比下补上。