商品货架管理数据结构课程设计.docx

上传人:b****3 文档编号:5263443 上传时间:2022-12-14 格式:DOCX 页数:10 大小:17.15KB
下载 相关 举报
商品货架管理数据结构课程设计.docx_第1页
第1页 / 共10页
商品货架管理数据结构课程设计.docx_第2页
第2页 / 共10页
商品货架管理数据结构课程设计.docx_第3页
第3页 / 共10页
商品货架管理数据结构课程设计.docx_第4页
第4页 / 共10页
商品货架管理数据结构课程设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

商品货架管理数据结构课程设计.docx

《商品货架管理数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《商品货架管理数据结构课程设计.docx(10页珍藏版)》请在冰豆网上搜索。

商品货架管理数据结构课程设计.docx

商品货架管理数据结构课程设计

【问题描述】

商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。

上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。

【基本要求】

针对一种特定商品,实现上述管理过程。

【测试数据】

小四宋体,行间距单倍行距,每段缩进两个字符

【算法思想】

第一:

先定义数据日期的结构体——里面包括年、月、日

第二:

写进栈、出栈函数

第三:

写倒货函数

基本思想就是借助三个一维数组分别装载年(a[])、月(b[])、日(c[]),然后出栈并将所有元素放到这三个数组中,一个生产日期的年、月、日数组的下标必须必须相同否则就乱了。

再将数组中元素按生产日期较近进行排序,最后一步将数组中的元素压到原来的栈中即可。

第四:

函数输出,输出只是单纯的输出,不要求出战,故需要另写一个函数

第五:

主函数因为可以循环使用,故用switch—case语句即可实现

【模块划分】

进栈、出栈、倒货、输出和主函数

【数据结构】

栈:

程序中使用的是链栈,链栈的好处是只要还有存储空间就会存储,结构体的next域指向下一个数据域,它的存储空间是随意的,可以连续,也可以不连续。

数组:

数组的存储方式是连续的物理空间,下标即为存储位置,可以高效的运行

【测试情况】

小四宋体,行间距单倍行距

重点内容,每个功能抓图并且给予文字解释

【心得】

通过此次的课程设计让我深刻的了解到了数据结构是很难的,刚开始的写的时候,结构体定义就出错了,以至于后边的函数功能都出错了,就连输入都有错误,我刚开始以为是我的函数写错了呐!

把进栈、出栈函数照着教材上的又重新写了一会,结果发现还是不行,后来请教班里学的比较还好的同学,发现我结构体定义的有问题,我年份用的是int类型,月、日用的是char类型,char类型只能接收一个字符,第二个就不能接收不了,所我的输入总有问题,后来我改成int类型的就没有这种情况了。

后来又想边比较边压栈,弄了一段时间,后来由于时间关系就没实现,就借助数组实现的。

也是一种遗憾。

以后有时间写出来。

此次的课程设计,让我对栈有了更加深入的理解,因为结构体出错时写了好几遍,同时也感谢帮助我的老师和同学们,谢谢给我的帮助,才是顺利的完成此次课程设计。

【源程序】

5号,TimesNew Roman  字体

#include

#include

#defineFALSE0

#defineTRUE1

#defineSIZE3

#defineNUM100

//日期结构体定义

typedefstructDate

{

intyear;

intmonth;

intday;

}Date,*DATE;

//链栈结构体定义

typedefstructNode

{

Datedate;

structNode*next;

}linkstacknode,*linkstack;

//链栈初始化

voidinitstack(linkstack*S)

{

*S=(linkstacknode*)malloc(sizeof(linkstacknode));

(*S)->next=NULL;

}

//链栈进栈

intpush(linkstacknode*S,Datedate)

{

linkstacknode*temp;

temp=(linkstacknode*)malloc(sizeof(linkstacknode));

if(temp==NULL)return(FALSE);

temp->date.year=date.year;

temp->date.month=date.month;

temp->date.day=date.day;

temp->next=S->next;

S->next=temp;

return(TRUE);

}

//链栈出栈

intPop(linkstacknode*S,Date*date)

{

linkstacknode*temp;

temp=S->next;

if(temp==NULL)return0;

S->next=temp->next;

date->year=temp->date.year;

date->month=temp->date.month;

date->day=temp->date.day;

free(temp);

return1;

}

//链栈输出

voidshow_Date_linkstacknode(linkstacknode*S)

{

linkstacknode*p=NULL;

p=S->next;

while(p!

=NULL)

{

printf("%d:

%d:

%d:

\n",p->date.year,p->date.month,p->date.day);

p=p->next;

}

}

//删除

voiddelet(linkstacknode*S,Date*date)

{

inti=0,j=0,n=0;//temp0,temp1,temp2,

inta[NUM]={0};

intb[NUM]={0};

intc[NUM]={0};

Date*date0=NULL;

date0=(Date*)malloc(sizeof(Date));

while(S->next!

=NULL)//将栈中元素放在数组中

{

Pop(S,date);

a[i]=date->year;

b[i]=date->month;

c[i]=date->day;

i++;

}

//删除元素与栈中元素比较并覆盖删除

for(j=0;j

{

if(a[j]==date->year)

{

if(b[j]==date->month)

{

if(c[j]==date->day)

{

for(;j

{

a[j]=a[j+1];

b[j]=b[j+1];

c[j]=c[j+1];

}

}

}

}

}

//将排好的数组中元素压入到栈中

for(n=0;n

{

S->date.year=a[n];

S->date.month=b[n];

S->date.day=c[n];

push(S,S->date);

//a[n]=S->date.year;

//b[n]=S->date.month;

//c[n]=S->date.day;

//push(S,S->date);

}

}

//排序压栈

voidshuru(linkstacknode*S)

{

inti=0,j=0,n=0,temp0,temp1,temp2;

inta[NUM]={0};//日期—年数组

intb[NUM]={0};//日期—月数组

intc[NUM]={0};//日期—日数组

Date*date=NULL;

date=(Date*)malloc(sizeof(Date));

while(S->next!

=NULL)//将栈中元素放在数组中

{

Pop(S,date);

a[i]=date->year;

b[i]=date->month;

c[i]=date->day;

i++;

}

//从大到小排序

for(j=0;j

{

if(a[j]

{

temp0=a[j+1];

temp1=b[j+1];

temp2=c[j+1];

a[j+1]=a[j];

b[j+1]=b[j];

c[j+1]=c[j];

a[j]=temp0;

b[j]=temp1;

c[j]=temp2;

}

elseif(b[j]

{

temp0=a[j+1];

temp1=b[j+1];

temp2=c[j+1];

a[j+1]=a[j];

b[j+1]=b[j];

c[j+1]=c[j];

a[j]=temp0;

b[j]=temp1;

c[j]=temp2;;

}

elseif(c[j]

{

temp0=a[j+1];

temp1=b[j+1];

temp2=c[j+1];

a[j+1]=a[j];

b[j+1]=b[j];

c[j+1]=c[j];

a[j]=temp0;

b[j]=temp1;

c[j]=temp2;

}

}

//将排好的数组中元素压入到栈中

for(n=0;n

{

S->date.year=a[n];

S->date.month=b[n];

S->date.day=c[n];

push(S,S->date);

}

}

voidmenu()

{

printf("*****************************************************\n");

printf("******************可口可乐**********************\n");

printf("*****************************************************\n");

printf("\n");

printf("***********日期(年月日)之间用空格隔开***************\n");

printf("**********一个日期(年月日)完成后按回车**************\n");

printf("\n");

printf("****************** 1:

产品输入 **********************\n");

printf("***************** 2:

产品输入 **********************\n");

printf("****************** 3:

产品输出 **********************\n");

printf("****************** 4:

退  出 ***********************\n");

printf("\n");

}

voidmain()

{

chari=0,flag=1,cloise=0;

intm=0;

linkstacknode*S=NULL;

//*S=(linkstacknode*)malloc(sizeof(linkstacknode))

Date*date=NULL;

Date*date1=NULL;

initstack(&S);

flushall();

date=(Date*)malloc(sizeof(Date));

date1=(Date*)malloc(sizeof(Date));

while(flag)

{

menu();

printf("请输入选择项:

\n");

scanf("%d",&cloise);

switch(cloise)

{

case1:

printf("请安输入商品个数:

\n");

scanf("%d",&m);

printf("请输入日期(年月日):

\n");

for(i=0;i

{

scanf("%d%d%d",&date->year,&date->month,&date->day);

push(S,*date);

}

break;

case2:

printf("请输入日期(年月日):

\n");

scanf("%d%d%d",&date1->year,&date1->month,&date1->day);

delet(S,date1);

break;

case3:

printf("上货后的日期如下:

\n");

shuru(S);

show_Date_linkstacknode(S);

break;

case4:

flag=0;

break;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1