《数据结构实验三(1).doc》由会员分享,可在线阅读,更多相关《数据结构实验三(1).doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据结构实验三(1)数据结构实验报告三实验名: 栈的基本操作 院系:物理与电子工程系 姓名:黄锐(2009122105) 班级: 20091221 日期:2010-1013 请在下次上机前以附件形式提交到yuan_sjjg一、上机实验的问题和要求:设计算法,入栈和出栈的操作。具体实现要求:1写出栈的入栈和出栈算法。2写一个程序,将输入的十进制数据M 转换为八进制数据M8,将其调试通过.在此基础上修改程序,实现十进制数据M 向N 进制(2或8或16)的转换。(1)采用顺序存储结构实现栈。(2)采用链表结构实现栈.二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,
2、符号名说明等)关于链表实现栈操作,内存空间利用比较充分,你插入一个,他就给你分配一个内存空间,这样相对顺序表实现栈比较合理。三、源程序及注释:1。 采用顺序存储结构实现栈:includeincludestdio。h#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct int base;int top;int stacksize;SqStack;/初始化得到一个空栈/void InitStack(SqStack &s)s.base =(int )malloc(STACK_INIT_SIZEsizeof(int);if
3、(!s.base ) exit(0);s.top=s.base ;s。stacksize =STACK_INIT_SIZE;/向栈里插入一个数/int StackInter(SqStack s,int e)if(s。top s。base=s.stacksize )s。base=(int )realloc(s。base,(s.stacksize+STACKINCREMENT)*sizeof(int));if(!s.base) exit(0);s.top=s。base+s.stacksize;s.stacksize+=STACKINCREMENT;s。top+=e;return 1;/把栈顶元素删
4、除,并把值赋给e,实现退栈/int StackPop(SqStack &s,int e)if(s。top=s.base) return 0;e=*-s.top;*s.top =0;return 1;main()SqStack p;int q=0,n ,j,date20,o;printf(请输入一个十进制的数和要转换的目标进制:n”);cinno;InitStack(p);/入栈/while(n)StackInter(p,n%o);n/=o;q+;cout转换后的数为:;/出栈输出结果/for(j=0;jq;j+)if(StackPop(p,datej))switch(datej)case 10
5、:coutA;break;case 11:cout”B”;break;case 12:cout”C;break;case 13:coutD;break;case 14:coutE”;break;case 15:cout”F”;break;default:coutdatej;else coutincludestdlib。hincludedate=e;p=(Sqt )malloc(sizeof(Sqt);/new Sqt();if(!p) exit(0);p-prior=s。top;s.top=p;return 1;/把栈顶元素删除,并把值赋给e,实现退栈/int StackPop(SqStack
6、 &s,int &e)Sqt p;if(s。top=s.base)cout该栈已为空栈!”date;s。toppriordate=0;p=s。top;s.top=s.topprior;free(p);/删除一个,就释放一个return 1;main()SqStack p;int q=0,n ,j,date20,o;printf(请输入一个十进制的数和要转换的目标进制:n);cinno;InitStack(p);/入栈/while(n)StackInter(p,n%o);n/=o;q+;cout”转换后的数为:”;/出栈输出结果/for(j=0;jq;j+)if(StackPop(p,datej
7、))/如果是16进制就以字母的形式显示出来/switch(datej)case 10:cout”A”;break;case 11:cout”B”;break;case 12:coutC;break;case 13:coutD”;break;case 14:coutE”;break;case 15:coutF”;break;default:coutdatej;else cout退栈失败!endl;coutendl;free(p.base); /释放malloc()在堆中申请的内存空间四、运行输出结果:1。 采用顺序存储结构实现结果:2。 采用链表结构实现栈结果:五、调试和运行程序过程中产生的问题及采取的措施:出现函数引用和传值方面的问题。把void InitStack(SqStack &s)中的参数改成引用(取别名)。六、对算法的程序的讨论、分析,改进设想,其它经验教训:七、对实验方式、组织、设备、题目的意见和建议: