ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:20.21KB ,
资源ID:21401504      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21401504.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构栈或队列的基本操作文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构栈或队列的基本操作文档格式.docx

1、栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。4判断“回文”问题(实验类型:所谓回文,是指从前向后顺读和从后向前倒读都一样的字符串。例如,did; pop; I was able 与 elba saw I 等等。编写程序,利用栈结构判断一个字符串是否是“回文”。从左向右遇到的字符,若和栈顶元素比较,若不相等,字符入栈,若相等,出栈。如此继续,若栈空,字符串是“回文”,否则不是。5用递归和非递归两种方法实现自然数的拆分(实验类型:任何大于 1 的自然数 n,总可以拆分成若干大于等于1 的自然数之和。 例: n=4 4=1+3 4=1+1+2 4=1+1+1+1 4=2+2 采用

2、递归和非递归两种方法实现利用交换率得出的拆分看作相同的拆分。递归算法:用数组a,ak中存储已完成的一种拆分ak能否再拆分取决于ak/2是否大于等于ak-1;递归过程有两个参数:n表示要拆分数值的大小;k表示n存储在数组元素ak中。非递归算法:(1)栈为两个数组a,b,ax,bx表示两个栈的栈顶元素;初始化:a1=1,b1=n,i=1, ax=ai,bx=bi(2)若i1 or axbx,重复若axbx/2,进栈并取栈顶元素,返回(2) i=i+1;ai=ax,bi=bx-ax,bx=bi若ax=bx,则数出拆分,退栈兵修改栈顶元素,返回(2) i=i-1;ai=ai+1,ax=ai,bx=bi

3、其余情况,bx/2axbx,修改栈顶元素,返回(2) ai=ai+1,ax=ai实验内容(应包括实验题目、实验要求、实验任务等)附录(可包括源程序清单或其它说明)实验源程序代码如下:第一题:#include stdlib.h#include#define StackSize 100typedef int StackType;typedef struct StackType dataStackSize; int top;Seq_stack;Seq_stack *Creatstack() Seq_stack *s; s=(Seq_stack *)malloc(sizeof(Seq_stack);

4、if(s!=NULL) s-top=-1; return s; else couttop=-1)此栈为空栈!此栈不是空栈!*/void Push(Seq_stack *s,StackType m) /入栈操作top=StackSize-1)此栈已满终止程序!top+;datas-top=m;StackType Pop(Seq_stack *s) StackType temp;程序终止 temp=s-top;top-; return temp;void conver(int N,int i) /数制转换 StackType m; s=Creatstack(); while(N) Push(s,N

5、%i);/余数存入栈 N=N/i; /商作为被除数继续循环 while(s-top-1) m=Pop(s);m; coutN;请输入将要转换成 几 进制数i;您将要转换成 idata; t=t-next; free(temp); /释放删除节点所占内存空间 return t;StackType Get_top(Stack_node *t) /读取栈中数据此栈为空,无法读取! return 0; return t-int sub(StackType x) switch(x) case +:- return 1;* return 2;/ return 3;% return 4;( return 5

6、;) return 6;# return 7; StackType x1,x2,i,j,op,temp; char ch; Stack_node *OPTR=NULL; /算符栈 Stack_node *OPND=NULL; /对象栈 OPTR=Push(OPTR,); /将开始符号“#”压入栈中;请输入要进行的运算表达式: ch=getchar(); while(!(ch= & Get_top(OPTR)=) if(ch=|ch= i=sub(Get_top(OPTR); j=sub(ch); if(priorityij=3) OPTR=Pop(OPTR,&op); OPND=Pop(OPN

7、D,&x2);x1); switch(op) case OPND=Push(OPND,x1+x2); break; OPND=Push(OPND,x1-x2); OPND=Push(OPND,x1*x2); OPND=Push(OPND,x1/x2); OPND=Push(OPND,x1%x2); continue; if(priorityij=1) /栈内运算符优先级小于栈外运算符优先级 OPTR=Push(OPTR,ch); if(priorityij=2)temp); OPND=Push(OPND,ch-48); /将数字字符转换为数字压入栈中 ch=getchar();表达式的值为:G

8、et_top(OPND) return S;carstop* push(carstop* s,int x) s-top=x; return s;int pop(carstop* s) int temp; char t;top!=-1) if(temp9) temp=(65-10)+temp; t=(char)temp; coutttempa; P=stack3(P,a); pop(P); P=stack1(P,a); P=stack2(P,a);第四题:string.h#define N 20typedef struct stack char dataN;stack* creat() stac

9、k* S; S=(stack*)malloc(sizeof(stack); S- return S;stack* push(stack* S,char a)dataS-top=a;stack* pop(stack* S) char a; a=S- char sN; S=creat();请输入内容:s; for(int i=0;si!=0i+) push(S,si); for(i;i-) if(si=S-top) pop(S);if(S-top=-1) 是回文!不是回文!第五题:(参考别人的)#define StackInitSize 50typedef int StackElementType

10、; StackElementType aStackInitSize; StackElementType bStackInitSize;SeqStack;SeqStack*InitStack() SeqStack*s; s=(SeqStack*)malloc(sizeof(SeqStack); else printf(没有足够的内存空间,申请失败,程序运行终止!nvoid DestoryStack(SeqStack*s) free(s); printf(栈已销毁!void Push(SeqStack*s,StackElementType x,StackElementType y)top=Stac

11、kInitSize)栈满!程序运行终止! elseas-bs-top=y;StackElementType Pop(SeqStack*s) StackElementType temp1,temp2; temp1=s- temp2=s- return 0;StackElementType GetTop(SeqStack*s,StackElementType*elem1,StackElementType*elem2) *elem1=s- *elem2=s-int main() int x,y,n,k2,k3,a; int sum=0; int b=0; int k150;请输入需要拆分的数:n;拆分的结果为: s=InitStack(); Push(s,1,n); GetTop(s,&x,&y); if(xy/2.0) Push(s,x,y-x); GetTop(s,&k1i,&k2); b+;n= for(int j=0;j=i;j+) coutk1j+k2 else if(x=y/2.0) Pop(s); for(; GetTop(s,&a,&k3); if(k3top=sum; coutsumk3 Pop(s); b-; sum=0; else break; break;/第五题代码参考其他同学的,已理解。

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

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