《2022年数据结构实验二栈基本操作定义 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构实验二栈基本操作定义 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验二栈基本操作一、实验目的掌握栈的基本操作:初始化、判空、判满、入栈、出栈、取栈顶元素等运算。二、实验要求包含有头文件和main 函数;1.格式正确,语句采用缩进格式;2.设计子函数实现题目要求的功能;3.编译、连接通过,熟练使用命令键;4.运行结果正确,输入输出有提示,格式美观。三、实验设备、材料和工具1.奔腾 2 计算机或以上机型2.turboc2,win-tc 四、实验内容和步骤实验内容:1.分析程序。2.完成程序编写和补充步骤:3.确定数据的结构;4.利用 main 函数调用各子函数;5.调试、分析运行结果。五、实验报告要求1.根据实验内容初步设计好程序,并从理论上排除错误;2.针对
2、程序的健壮性准备好测试数据;3.结果分析中如实填写运行后的结果,记录调试过程中产生的重要问题和解决方法。六、根据实验过程填写下面内容基础部分1.构建下列头文件,文件名称seqstack.h#define TRUE 1#define FALSE 0#define Stack_Size 500#define StackElementType int typedef struct StackElementType elemStack_Size;/*用来存放栈中元素的一维数组*/int top;/*用来存放栈顶元素的下标,top 为-1 表示空栈*/名师资料总结-精品资料欢迎下载-名师精心整理-第 1
3、 页,共 6 页 -SeqStack;void InitStack(SeqStack*S)S-top=-1;int IsEmpty(SeqStack*S)/*判断栈 S 为空栈时返回值为真,反之为假*/return(S-top=-1?TRUE:FALSE);int IsFull(SeqStack*S)/*判断栈 S 为满栈时返回值为真,反之为假*/return(S-top=Stack_Size-1?TRUE:FALSE);int Push(SeqStack*S,StackElementType x)if(S-top=Stack_Size-1)return(FALSE);/*栈已满*/S-top
4、+;S-elemS-top=x;return(TRUE);int Pop(SeqStack*S,StackElementType*x)if(S-top=-1)/*栈为空*/return(FALSE);else *x=S-elemS-top;S-top-;/*修改栈顶指针*/return(TRUE);int GetTop(SeqStack*S,StackElementType*x)if(S-top=-1)/*栈为空*/return(FALSE);else *x=S-elemS-top;return(TRUE);2.构建判断回文序列的程序,完成运行和调试。回文序列如:序列1&序列 2/包含顺序栈头
5、文件#includeseqstack.h/包含顺序栈头文件#include stdio.h 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -void main()char ch,temp,str100;int i;SeqStack s;/定义顺序栈s InitStack(&s);/初始化顺序栈s printf(输入字符串(以&居中):n);scanf(%s,str);i=0;ch=stri;while(ch!=&)/括号内填入判断条件 Push(&s,ch);/变量 ch 值入栈i+;/变量 i 自增ch=stri;/赋值 str 中下一个元素值给ch 变量 while
6、(!IsEmpty(&s)/括号内填入判断条件 Pop(&s,&temp);/s出栈,出栈值存放与temp 变量中i+;/变量 i 自增ch=stri;/赋值 str 中下一个元素值给ch 变量if(temp!=ch)/括号内填入判断条件break;if(!IsEmpty(&s)|stri+1!=0)/括号内填入判断条件printf(no!n);else printf(yes!n);3.编写程序使栈内元素倒置(设置两个栈,把其中一个栈的元素顺序出栈,并顺序放入第二个栈中,则第二个栈中元素已经倒置)!名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -#include std
7、io.h/包含基本输入输出头文件#include seqstack.h/包含顺序栈头文件main()SeqStack s,t;/定义两个栈,s 和 t char str100,x;/定义字符数组str 用于存放输入的入栈字符串,x 用于出栈存放的变量int i;printf(请输入要入栈的字符:n);gets(str);/输入字符串InitStack(&s);/对栈 s 进行初始化InitStack(&t);/对栈 t 进行初始化for(i=0;stri!=0;i+)Push(&s,stri);/顺序读取字符数组内容并入s 栈printf(第一个栈的内容:n);while(!IsEmpty(&
8、s)Pop(&s,&x);/对栈 s 出栈,出栈数据放入变量x 中printf(%cn,x);/输出 x 的值Push(&t,x);/对栈 t 入栈,入栈值为x printf(第二个栈的内容:n);while(!IsEmpty(&t)Pop(&t,&x);/对栈 t 出栈,出栈数据放入变量x 中printf(%cn,x);/输出 x 的值 提高部分4.编写程序用栈实现进制转换中的数据存放问题,完成进制转换功能(转换成二进制)。#includestdio.h#includeseqstack.h void main()int x,temp;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,
9、共 6 页 -SeqStack s;InitStack(&s);printf(请输入 x:n);scanf(%d,&x);while(x0)temp=x%2;Push(&s,temp);/*整除 2 的余数进栈*/x=x/2;while(!IsEmpty(&s)Pop(&s,&temp);printf(%dn,temp);5.编写程序用栈实现求fibonacci 数列第 n(n=3)个数的值。#includestdio.h#includeseqstack.h void main()int a,b;int temp;int i;SeqStack s;InitStack(&s);Push(&s,1);Push(&s,1);for(i=1;i=18;i+)Pop(&s,&a);Pop(&s,&b);Push(&s,b);Push(&s,a);Push(&s,(a+b);temp=0;while(!IsEmpty(&s)Pop(&s,&temp);printf(%dn,temp);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -