商品货架管理
1、用栈和队列实现
#include <stdafx.h>
#include <stdio.h>
#include <string.h>
#define MaxSize 3
//定义商品信息
typedef struct
{
char name[20]; //商品名称
long int date; //商品生产日期
}ShangPin;
//定义顺序栈
typedef struct
{
ShangPin sp[MaxSize];
int top;
}SeqStack;
//定义顺序队列
typedef struct
{
ShangPin sp[MaxSize];
int front;
int rear;
}SeqQueue;
//入栈操作即插入新商品
int push(SeqStack *S)
{
int i=0;
for(S->top=0;S->top<MaxSize-1;S->top++)
{
printf("请输入第%d件商品名称:",S->top+1);
scanf("%s",&S->sp[S->top].name);
printf("请输入对应生产日期:");
scanf("%d",&S->sp[S->top].date);
printf("\n");
}
return(--S->top);
}
//利用栈S和循环队列Q来进行倒货架
int daohuojia(SeqStack *S,SeqQueue *Q,int TOP)
{
ShangPin NewGoods;
S->top=TOP;
Q->front=Q->rear=0;
printf("请输入你要添加的新商品名称:");
scanf("%s",&NewGoods.name);
printf("请输入对应生产日期:");
scanf("%d",&NewGoods.date);
while(S->top!=-1&&(NewGoods.date-S->sp[S->top].date)>0)
//比较新旧商品的生产日期
{
strcpy(Q->sp[Q->rear].name,S->sp[S->top].name);
Q->sp[Q->rear].date=S->sp[S->top].date;
Q->rear=(Q->rear+1)%MaxSize;
S->top--;
}
S->top++;//将新商品插入货架
strcpy(S->sp[S->top].name,NewGoods.name);
S->sp[S->top].date=NewGoods.date;
for(Q->front=MaxSize-2;Q->front>-1&&Q->front<MaxSize;Q->front=(Q->front-1)%MaxSize)
{
S->top++;
strcpy(S->sp[S->top].name,Q->sp[Q->front].name);
S->sp[S->top].date=Q->sp[Q->front].date;
}
return(S->top);
}
//输出插入新商品后的货架商品顺序
void pop(SeqStack *S,int TOP)
{
printf("更新商品后的货架商品顺序为:\n");
printf("商品名称 生产日期\n");
for(S->top=TOP;S->top>=0;S->top--)
{
printf(" %s ",S->sp[S->top].name);
printf("%d\n",S->sp[S->top].date);
}
printf("货架整理结束!\n");
}
void main()
{
/*char q[2];
printf("按l键退出, 其他任意键开始倒货架!");
scanf("%s",&q);
if(strcmp(q,"l")==0){
return;
}else{*/
int TOP=0;
SeqStack A;
SeqQueue B;
TOP=push(&A);
TOP=daohuojia(&A,&B,TOP);
pop(&A,TOP);
/*getchar();
}*/
}
2、用两个栈实现
#include <stdafx.h>
#include <stdio.h>
#include <string.h>
#define MaxSize 3
//定义商品信息
typedef struct
{
char name[20]; //商品名称
long int date; //商品生产日期
}ShangPin;
//定义顺序栈
typedef struct
{
ShangPin sp[MaxSize];
int top;
}SeqStack;
//入栈操作即插入新商品
int push(SeqStack *S1)
{
int i=0;
for(S1->top=0;S1->top<MaxSize-1;S1->top++)
{
printf("请输入第%d件商品名称:",S1->top+1);
scanf("%s",&S1->sp[S1->top].name);
printf("请输入对应生产日期:");
scanf("%d",&S1->sp[S1->top].date);
printf("\n");
}
return(--S1->top);
}
//利用栈S1和栈S2来进行倒货架
int daohuojia(SeqStack *S1,SeqStack *S2,int TOP)
{
ShangPin NewGoods;
S1->top=TOP;
S2->top=-1;
printf("请输入你要添加的新商品名称:");
scanf("%s",&NewGoods.name);
printf("请输入对应生产日期:");
scanf("%d",&NewGoods.date);
while(S1->top!=-1&&(NewGoods.date-S1->sp[S1->top].date)>0)
//比较新旧商品的生产日期
{
S2->top++;
strcpy(S2->sp[S2->top].name,S1->sp[S1->top].name);
S2->sp[S2->top].date=S1->sp[S1->top].date;
S1->top--;
}
S1->top++;//将新商品插入货架
strcpy(S1->sp[S1->top].name,NewGoods.name);
S1->sp[S1->top].date=NewGoods.date;
for(;S2->top>-1;S2->top--)
{
S1->top++;
strcpy(S1->sp[S1->top].name,S2->sp[S2->top].name);
S1->sp[S1->top].date=S2->sp[S2->top].date;
}
return(S1->top);
}
//输出插入新商品后的货架商品顺序
void pop(SeqStack *S1,int TOP)
{
printf("更新商品后的货架商品顺序为:\n");
printf("商品名称 生产日期:\n");
for(S1->top=TOP;S1->top>=0;S1->top--)
{
printf(" %s ",S1->sp[S1->top].name);
printf("%d\n",S1->sp[S1->top].date);
}
printf("货架整理结束!\n");
}
void main()
{
/*char q[2];
printf("按l键退出, 其他任意键开始倒货架!");
scanf("%s",&q);
if(strcmp(q,"l")==0){
return;
}else{*/
int TOP=0;
SeqStack A, B;
TOP=push(&A);
TOP=daohuojia(&A,&B,TOP);
pop(&A,TOP);
/*getchar();
}*/
}
分享到:
相关推荐
### 数据结构栈和队列知识点解析 #### 一、栈的基本概念与操作 **栈**是一种特殊的线性表,只允许在一端进行插入和删除操作,这一端被称为栈顶,另一端被称为栈底。栈遵循先进后出(First In Last Out, FILO)的...
### 数据结构之栈和队列知识点详解 #### 一、选择题知识点解析 1. **栈的操作原则** 栈是一种特殊的线性表,它只允许在一端进行插入和删除操作,这一端称为栈顶(top)。另一端称为栈底(bottom),不允许在其上进行...
栈和队列是两种基础且重要的数据结构,广泛应用于各种算法和程序设计中。本课件及课堂笔记将深入探讨这两种数据结构的概念、特性以及它们在实际问题中的应用。 栈(Stack)是一种后进先出(LIFO,Last In First Out...
数据结构栈和队列相关习题及答案
数据结构栈和队列解决迷宫问题 本文档详细介绍了利用栈和队列解决迷宫问题的步骤,对于初学者学习数据结构能很好的进行辅导。本文档主要涉及到数据结构的两个重要概念:栈和队列,并介绍了如何使用这两个数据结构来...
数据结构 栈和队列 教你重新认识栈和队列
PPT内容是数据结构中有关栈和队列的知识,非常适合正在学习数据结构基础的同学
数据结构中的栈和队列是两种非常基础且重要的线性数据结构,它们在计算机科学的许多领域都有着广泛的应用。栈通常被称为“后进先出”(LIFO, Last In First Out)的数据结构,而队列则被称为“先进先出”(FIFO, ...
数据结构
"数据结构栈和队列实验报告" 本实验报告的主要目的是为了理解栈和队列的特征,以及它们之间的差异,在何时使用那种数据结构。同时,掌握在顺序栈和链栈上实现栈的基本运算算法,并且了解栈满和栈空的条件。另外,...
该课件是数据结构栈和队列部分的,是基于C语言描述的数据结构
### 数据结构实验报告《二、栈和队列的运用》 #### 栈和队列的基础概念及应用 在计算机科学中,数据结构是用于组织和存储数据的方式,它允许高效地访问和修改数据。其中,栈(Stack)和队列(Queue)是最基本的...
基于c语言数据结构中栈和队列思想的简单停车场管理系统,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车...