首页 栈和队列的基本操作解析

栈和队列的基本操作解析

举报
开通vip

栈和队列的基本操作解析栈和队列的基本操作解析 《数据结构与算法》实验报告 专业 班级 姓名 学号 实验项目 实验二 栈和队列的基本操作。 实验目的 1、掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。 2、掌握队列的基本操作:初始化队列、判队列为空、出队列、入队列等运算。 实验内容 题目1: 进制转换。利用栈的基本操作实现将任意一个十进制整数转化为R进制整数 算法提示: 1、定义栈的顺序存取结构 2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3、定义一个函数用来实现上面问题: 十进制整数X和R作...

栈和队列的基本操作解析
栈和队列的基本操作解析 《数据结构与算法》 实验报告 化学实验报告单总流体力学实验报告观察种子结构实验报告观察种子结构实验报告单观察种子的结构实验报告单 专业 班级 姓名 学号 实验项目 实验二 栈和队列的基本操作。 实验目的 1、掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。 2、掌握队列的基本操作:初始化队列、判队列为空、出队列、入队列等运算。 实验内容 题目1: 进制转换。利用栈的基本操作实现将任意一个十进制整数转化为R进制整数 算法提示: 1、定义栈的顺序存取结构 2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3、定义一个函数用来实现上面问题: 十进制整数X和R作为形参 初始化栈 只要X不为0重复做下列动作 将X%R入栈 X=X/R 只要栈不为空重复做下列动作 栈顶出栈 输出栈顶元素 题目2: 利用队列的方式实现杨辉三角的输出。 算法设计分析 (一)数据结构的定义 1、栈的应用 实现十进制到其他进制的转换,该计算过程是从低位到高位顺序产生R进制数的各个位数,而打印输出一般从高位到低位进行,恰好与计算过程相反。因此,运用栈先进后出的性质,即可完成进制转换。 栈抽象数据结构描述 typedef struct SqStack /*定义顺序栈*/ { int *base; /*栈底指针*/ int *top; /*栈顶指针*/ int stacksize; /*当前已分配存储空间*/ } SqStack; 2、队列的应用 由于是要打印一个数列,并且由于队列先进先出的性质,肯定要利用已经进队的元素在其出队之前完成杨辉三角的递归性。即,利用要出队的元素来不断地构造新的进队的元素,即在第N行出队的同时,来构造杨辉三角的第N+1行,从而实现打印杨辉三角的目的。 2 队列抽象数据结构描述 typedef struct SeqQueue { int data[MAXSIZE]; int front; /*队头指针*/ int rear; /*队尾指针*/ }SeqQueue; (二)总体设计 1、栈 (1)主函数:统筹调用各个函数以实现相应功能 int main() (2)空栈建立函数:对栈进行初始化。 int StackInit(SqStack *s) (3)判断栈空函数:对栈进行判断,若栈中有元素则返回1,若栈为空,则返回0。 int stackempty(SqStack *s) (4)入栈函数:将元素逐个输入栈中。 int Push(SqStack *s,int x) (5)出栈函数:若栈不空,则删除栈顶元素,并用x返回其值。 nt Pop(SqStack *s,int x) i (6)进制转换函数:将十进制数转换为R进制数 int conversion(SqStack *s) 2、队列 (1)主函数:统筹调用各个函数以实现相应功能 void main() (2)空队列建立函数:对队列进行初始化。 SeqQueue *InitQueue() (3)返回队头函数: 判断队是否为空,若不为空则返回队头元素。 int QueueEmpty(SeqQueue *q) (4)入队函数:将元素逐个输入队列中。 void EnQueue(SeqQueue *q,int x) (5)出队函数:若队列不空,则删除队列元素,并用x返回其值。 int DeQueue(SeqQueue *q) (6)计算队长函数:计算队列的长度。 int QueueEmpty(SeqQueue *q) (7)输出杨辉三角函数:按一定格式输出杨辉三角。 void YangHui(int n) (三)各函数的详细设计: 1、栈 (1)int main()主函数 定义s为栈类型 调用函数建立空栈 3 调用进制转换函数 返回0值 (2)int StackInit(SqStack *s) 空栈建立函数 动态分配内存 判断分配成功并返回相应的值 若成功,初始化存储空间 (3)int stackempty(SqStack *s) 判断栈空函数 若栈为空,返回0,否则返回1 (4)int Push(SqStack *s,int x) 入栈函数 比较栈中元素所占空间与已分配存储空间 若栈满,追加存储空间 若存储失败则返回0 存储空间不够,添加增量 逐个输入数据元素 返回x的值 (5)int Pop(SqStack *s,int x) 出栈函数 如果栈为空,则返回0 若栈不空,则删除栈顶元素,用x返回其值 (6):int conversion(SqStack *s) 进制转换函数 输入要转化的十进制数 输入要转化为几进制 运用求余运算改变进制数 运用选择结构控制十六进制的输出方式 2、队列 (1)void main()主函数 输入杨辉三角的行数 调用杨辉三角输出函数 输出杨辉三角 (2)SeqQueue *InitQueue()空队列建立函数 动态分配内存 建立队列并返还该队列 (3)int QueueEmpty(SeqQueue *q) 返回队头函数 判断队列为空,返回0 若不空返回队头元素 (4)void EnQueue(SeqQueue *q,int x) 入队函数 判断队满 若不满,逐个添加元素 (5)int DeQueue(SeqQueue *q) 出队函数 若头指针等于尾指针,顺序队列是空的不能做删除操作 否则,删除队列 用x返回出队的值 (6)int QueueEmpty(SeqQueue *q) 计算队长函数 头指针减尾指针,求队列长度 4 (7)void YangHui(int n) 输出杨辉三角函数 定义变量 循环输出元素1 插入1为队列队尾元素 使用空格控制输出格式 逐个输出队列元素,并构建下一行需输出的队列 运算结果插入队尾 实验测试结果及结果分析 (一)测试结果 (进制转换) (杨辉三角) 5 (二)结果分析 调试程序时,出现了许多错误。如: 有时候写的没有出现问题,但运行的结果是Press anu key to continue 。程序肯定有错,但为什么会出现这种问题呢。分号的忘记那还是很经常的,要加强注意。在做表达式的计算的时候一定要注意何时入栈何时出栈,队列也是同样的。如果如栈与出栈的情况判断不清楚就无法得出答案。在写主函数时,如果是用void main的形式,那么可以不用有返回值,如果是int main的话,要有返回值,既末尾要有return语句。 实验 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 1.进一步巩固了C语言的基础,尤其是指针那部分; 2.通过实验加深了对栈和队列的操作方面知识的认识。更深层次了解了栈和队列的操作特点及不同之处; 3.通过实验达到了理论与实践结合的目的,提高了自己的编程能力; 4.程序可能不够完善需要在学习过程中不断去完善,这需要平时的努力。 附录 实验程序代码 一、进制转换 #include #include #include #define STACK_INIT_SIZE 100 /*存储空间初始分配量*/ #define STACKINCEREMENT 10 /*存储空间分配增量*/ typedef struct SqStack /*定义顺序栈*/ { int *base; /*栈底指针*/ int *top; /*栈顶指针*/ int stacksize; /*当前已分配存储空间*/ } SqStack; /*建立空栈函数*/ int StackInit(SqStack *s) /*构造一个空栈*/ { s->base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));/*动态分配内存*/ if(!s->base) /*存储分配失败*/ return 0; s->top=s->base; s->stacksize=STACK_INIT_SIZE; /*初始化存储空间*/ return 1; } /*判断栈空函数*/ int stackempty(SqStack *s) /*判断栈是否为空*/ { if(s->top==s->base) { return 1; } else { return 0; } } /*入栈函数 */ int Push(SqStack *s,int x) /*入栈,插入x为新的栈顶元素*/ { if(s->top-s->base>=s->stacksize) /*比较栈中元素所占空间与已分配存储空间*/ { 6 s->base=(int *)realloc(s->base,(s->stacksize+STACKINCEREMENT)*sizeof(int)); /*栈满,追加存储空间*/ if(!s->base) /*若存储失败则返回0*/ return 0; s->top=s->base+s->stacksize; s->stacksize+=STACKINCEREMENT; /*存储空间不够,添加增量*/ } *(s->top++)=x;/*逐个输入数据元素*/ return x; } /*出栈函数*/ int Pop(SqStack *s,int x)/*出栈操作*/ { if(s->top==s->base) /*如果栈为空,则返回0*/ return 0; x=*--s->top;/*若栈不空,则删除栈顶元素,用x返回其值*/ return x; } /*进制转换函数*/ int conversion(SqStack *s) { /*将所输入的任意一个非负的十进制数转换为R进制的数*/ int n,x=0,R=0; printf("输入要转化的十进制数:\n"); scanf("%d",&n); printf("要转化为几进制:\n输入2代表二进制\n输入8代表八进制\n输入16代表十六进制 \n"); scanf("%d",&R); printf("将十进制数%d 转化为%d 进制是:\n",n,R); while(n) { Push(s,n%R);/*运用求余运算改变进制数*/ n=n/R; } while(!stackempty(s)) { x=Pop(s,x); switch(x) /*十六进制的输出方式*/ { case 10: printf("A"); break; case 11: printf("B"); break; case 12: printf("C"); break; case 13: printf("D"); break; case 14: printf("E"); break; 7 case 15: printf("F"); break; default: printf("%d",x); } } printf("\n"); return 0; } /*主函数*/ int main() { SqStack s; /*定义s为栈类型*/ StackInit(&s); conversion(&s); return 0; } 二、输出杨辉三角 #include #include #include #define MAXSIZE 10 typedef struct SeqQueue/*定义队列*/ { int data[MAXSIZE]; int front; /*队头指针*/ int rear; /*队尾指针*/ }SeqQueue; /*建立空队列函数*/ SeqQueue *InitQueue() /*构造一个空队列*/ { SeqQueue *q; q=(SeqQueue*)malloc(sizeof(SeqQueue));/*动态分配内存*/ q->front=q->rear=0; return q; } /*入队函数*/ void EnQueue(SeqQueue *q,int x)/*插入元素x为队列的新的队尾元素*/ { if((q->rear+1)%MAXSIZE==q->front) /*判断队满*/ printf("\n顺序循环队列是满的~"); else { 8 q->data[q->rear]=x; q->rear=(q->rear+1)%MAXSIZE; } } /*出队函数*/ int DeQueue(SeqQueue *q)/*若队列不空则删除队头元素,并返回其值*/ { int x; if(q->front==q->rear) { printf("\n顺序队列是空的~不能做删除操作~"); return 0; } x=q->data[q->front]; /*用x返回出队的值*/ q->front=(q->front+1)%MAXSIZE; return x; } /*求队列长度函数*/ int QueueEmpty(SeqQueue *q) /*求队列的长度*/ { return(q->front-q->rear); } /*返回队头函数*/ int GetHead(SeqQueue *q)/*用e返回队头元素*/ { int e; if(q->front==q->rear) /*队列为空*/ e=0; else e=q->data[q->front]; return e; } /*输出杨辉三角函数*/ void YangHui(int n)/*输出杨辉三角*/ { SeqQueue *q; int i,j,a,b; for(i=1;i 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 排版(3分) 1 算法思想分析(6分) 2 源代码(6分) 3 实验结果及分析(5分) 4 10 古今名言 敏而好学,不耻下问——孔子 业精于勤,荒于嬉;行成于思,毁于随——韩愈 兴于《诗》,立于礼,成于乐——孔子 己所不欲,勿施于人——孔子 读书破万卷,下笔如有神——杜甫 读书有三到,谓心到,眼到,口到——朱熹 立身以立学为先,立学以读书为本——欧阳修 读万卷书,行万里路——刘彝 黑发不知勤学早,白首方悔读书迟——颜真卿 书卷多情似故人,晨昏忧乐每相亲——于谦 书犹药也,善读之可以医愚——刘向 莫等闲,白了少年头,空悲切——岳飞 发奋识遍天下字,立志读尽人间书——苏轼 鸟欲高飞先振翅,人求上进先读书——李苦禅 立志宜思真品格,读书须尽苦功夫——阮元 非淡泊无以明志,非宁静无以致远——诸葛亮 熟读唐诗三百首,不会作诗也会吟——孙洙《唐诗三百首序》 书到用时方恨少,事非经过不知难——陆游 问渠那得清如许,为有源头活水来——朱熹 旧书不厌百回读,熟读精思子自知——苏轼 书痴者文必工,艺痴者技必良——蒲松龄 11 声明 访问者可将本资料提供的内容用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本文档及相关权利人的合法权利。谢谢合作~ 12
本文档为【栈和队列的基本操作解析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_337177
暂无简介~
格式:doc
大小:83KB
软件:Word
页数:17
分类:
上传时间:2017-10-21
浏览量:41