您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数据结构用c语言描述实验四
实验四实验名称栈和队列及其应用实验性质设计性实验学时数4学时一、实验目的1.掌握栈与队列的抽象数据类型描述及特点。2.掌握栈和队列的顺序和链式存储结构与基本算法实现。3.掌握栈和队列在实际问题中的应用和基本编程技巧。二、实验内容1.栈和队列在不同存储结构上进行插入、删除等操作的算法。2.通过栈或队列解决现实中的一些问题。三、实验过程1、实验题目[问题描述]以下题目根据自己兴趣和能力可选作一道作为实验题目:(1)根据栈的数据结构,建立一个顺序栈和链栈并实现对其基本操作;(2)根据队列的数据结构,建立一个循环队列和链队并实现对其基本操作;(3)根据教材4.3.3节介绍的思想,设计并实现一个对简化表达式求值的系统(4)银行业务队列简单模拟。设某银行有A、B两个业务窗口,其中A窗口的处理速度是B窗口的2倍,给定到达银行的顾客序号,请按业务完成的顺序输出顾客序列(假设奇数编号到A窗口办理,偶数编号到B窗口办理,不同窗口同时处理完2个顾客,A窗口优先输出)。[基本要求](1)按实验内容编写完整的程序,并上机验证。(2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。[测试数据]由学生依据软件工程的测试技术自己确定。注意测试边界数据。2、源程序#includestdio.h#includemalloc.h#defineStack_Size100#defineStackElementTypeint#defineTRUE1#defineFALSE0typedefstruct//顺序栈{StackElementTypeelem[Stack_Size];inttop;}SeqStack;typedefstructnode//链栈{StackElementTypedata;structnode*next;}LinkStackNode;typedefLinkStackNode*LinkStack;voidInitStack(SeqStack*s)//初始化顺序栈{s-top=-1;}voidInitStack_L(LinkStackNode*s)//初始化链栈{s-next=NULL;}intPush(SeqStack*s,StackElementTypex)//顺序栈进栈{if(s-top==Stack_Size-1)return(FALSE);s-top++;s-elem[s-top]=x;return(TRUE);}intPop(SeqStack*s,StackElementType*x)//顺序栈出栈{if(s-top==-1)return(FALSE);else{*x=s-elem[s-top];s-top--;printf(出栈元素为:%d,*x);return(TRUE);}}voidprint(SeqStacks)//打印顺序栈{inti;if(s.top==-1)printf(栈为空:\n);else{printf(栈里的元素为:);do{printf(%4d,s.elem[s.top]);s.top--;}while(s.top!=-1);printf(\n);}}intPush(LinkStacktop,StackElementTypex)//链栈进栈{LinkStackNode*temp;temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));if(temp==NULL)return(FALSE);temp-data=x;temp-next=top-next;top-next=temp;return(TRUE);}intPop(LinkStacktop,StackElementType*x)//链栈出栈{LinkStackNode*temp;temp=top-next;if(temp==NULL)return(FALSE);top-next=temp-next;*x=temp-data;free(temp);return(TRUE);}voidprint(LinkStacks)//打印链栈{LinkStackp=s-next;printf(栈中的元素为:);while(p!=NULL){printf(%4d,p-data);p=p-next;}printf(\n);}intmain(){intchoice0,choice1,choice2,x,y,i,k;SeqStacks1;LinkStackNodes2;do{printf(请输入您的选择:1.我要对顺序栈进行操作2.我要对链栈进行操作0.退出\n);scanf(%d,&choice0);switch(choice0){case1:InitStack(&s1);do{printf(请输入您的选择:1.入栈2.出栈3.打印0.退出\n);scanf(%d,&choice1);switch(choice1){case1:printf(请输入入栈元素:);scanf(%d,&x);Push(&s1,x);print(s1);break;case2:Pop(&s1,&k);print(s1);break;case3:print(s1);break;case0:break;}}while(choice1!=0);break;case2:InitStack_L(&s2);do{printf(请输入您的选择:1.入栈2.出栈3.打印0.退出\n);scanf(%d,&choice2);switch(choice2){case1:printf(请输入入栈元素:);scanf(%d,&y);Push(&s2,y);print(&s2);break;case2:Pop(&s2,&i);printf(出栈元素为:%d\n,i);print(&s2);break;case3:print(&s2);break;case0:break;}}while(choice2!=0);break;case0:break;}printf(*******谢谢您的使用*******\n);}while(choice0!=0);return0;}
本文标题:数据结构用c语言描述实验四
链接地址:https://www.777doc.com/doc-2334130 .html