`

数据结构(栈和队列)

阅读更多
商品货架管理
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),不允许在其上进行...

    数据结构 栈和队列PPT

    栈和队列是两种基础且重要的数据结构,广泛应用于各种算法和程序设计中。本课件及课堂笔记将深入探讨这两种数据结构的概念、特性以及它们在实际问题中的应用。 栈(Stack)是一种后进先出(LIFO,Last In First Out...

    数据结构栈和队列相关习题及答案

    数据结构栈和队列相关习题及答案

    数据结构栈和队列解决迷宫问题

    数据结构栈和队列解决迷宫问题 本文档详细介绍了利用栈和队列解决迷宫问题的步骤,对于初学者学习数据结构能很好的进行辅导。本文档主要涉及到数据结构的两个重要概念:栈和队列,并介绍了如何使用这两个数据结构来...

    数据结构 栈和队列

    数据结构 栈和队列 教你重新认识栈和队列

    数据结构中的栈和队列

    PPT内容是数据结构中有关栈和队列的知识,非常适合正在学习数据结构基础的同学

    数据结构栈和队列

    数据结构中的栈和队列是两种非常基础且重要的线性数据结构,它们在计算机科学的许多领域都有着广泛的应用。栈通常被称为“后进先出”(LIFO, Last In First Out)的数据结构,而队列则被称为“先进先出”(FIFO, ...

    数据结构栈和队列练习题答案.doc

    数据结构

    数据结构栈和队列实验报告.doc

    "数据结构栈和队列实验报告" 本实验报告的主要目的是为了理解栈和队列的特征,以及它们之间的差异,在何时使用那种数据结构。同时,掌握在顺序栈和链栈上实现栈的基本运算算法,并且了解栈满和栈空的条件。另外,...

    数据结构栈和队列课件

    该课件是数据结构栈和队列部分的,是基于C语言描述的数据结构

    数据结构实验报告《二、栈和队列的运用》

    ### 数据结构实验报告《二、栈和队列的运用》 #### 栈和队列的基础概念及应用 在计算机科学中,数据结构是用于组织和存储数据的方式,它允许高效地访问和修改数据。其中,栈(Stack)和队列(Queue)是最基本的...

    数据结构中栈和队列思想的停车场管理系统

    基于c语言数据结构中栈和队列思想的简单停车场管理系统,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车...

Global site tag (gtag.js) - Google Analytics