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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

链栈顺序栈实验报告.docx

1、链栈顺序栈实验报告第五次实验报告顺序栈、链栈的插入和删除一 需求分析1、在演示程序中,出现的元素以数字出现定义为int型,2、演示程序在计算机终端上,用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在终端上3、顺序栈的程序执行的命令包括如下: (1) 定义结构体 (2) 顺序栈的初始化及创建 (3) 元素的插入 (4) 元素的删除 (5) 顺序栈的打印结果3、链栈的程序执行的命令包括如下: (1) 定义结构体 (2) 链栈的初始化及创建 (3) 元素的插入 (4) 元素的删除 (5)链栈的打印结果二 概要设计1、顺序栈可能需要用到有序表的抽象数据类型定义:ADT List

2、数据对象:D=ai|aiElemL, i=1,2,.,n, n0数据关系:R1=|ai-1,ai D, i=2,.,n 基本操作:InitStack(SqStack &S) 操作结果:构造一个空栈Push(L,e)操作结果:插入元素e为新的栈顶元素Status Pop(SqStack &S) 操作结果:删除栈顶元素ADT List;2、链栈可能需要用到有序表的抽象数据类型定义:ADT List数据对象:D=ai|aiElemL, i=1,2,.,n, n0数据关系:R1=|ai-1,ai D, i=2,.,n 基本操作:LinkStack(SqStack &S) 操作结果:构造一个空栈Stat

3、us Push(L,e)操作结果:插入元素e为新的栈顶元素Status Pop(SqStack &S) 操作结果:删除栈顶元素ADT List;3、顺序栈程序包含的主要模块: (1) 已给定的函数库: (2)顺序栈结构体: (3)顺序栈初始化及创建: (4)元素插入 (5)元素删除 (6)主程序: 4、链栈程序包含的主要模块: (1) 已给定的函数库: (2)链栈结构体: (3)链栈初始化及创建: (4)元素插入 (5)元素删除 (6)主程序: 三 详细设计线性栈:结构体#define STACK_INIT_SIZE 100/存储空间初始分配量#define STACKINCREMENT 10

4、/存储空间分配增量typedef struct int *base;/在构造栈之前和销毁之后,base的值为NULL int *top;/栈顶指针 int stacksize;/当前已分配的存储空间,以元素为单位SqStack#includeBase.h主函数#includeconstruction.h#includestack_operation.cint main() SqStack S; int choice,e; S=InitStack(); S=Input_Sq(S); printf(请选择执行的操作,输入1执行入栈操作,输入2执行出栈操作choice=); scanf(%d,&ch

5、oice); switch(choice) case 1: printf(请输入插入元素的值e=); scanf(%d,&e); S=Push(S,e); printf(执行入栈操作后的线性栈为); Print_Stack(S); ;break; case 2: S=Pop(S); printf(执行出栈操作后的线性栈为); Print_Stack(S); ;break; default : printf(您输入的值不合法); 线性栈的创建SqStack InitStack()/线性栈的创建 SqStack S; S.base=(int*)malloc(STACK_INIT_SIZE * si

6、zeof(int);/分配存储空间 if(!S.base) exit(OVERFLOW);/存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return S;输入函数SqStack Input_Sq(SqStack S)/输入函数 int n,i; printf(请输入元素个数n=); scanf(%d,&n); printf(请输入%d个元素,n); for(i=0;i=S.stacksize)/判断栈是否为满,追加存储空间 S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*s

7、izeof(int); if(!S.base) exit(OVERFLOW);/存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e;/插入元素 return S;出栈函数SqStack Pop(SqStack S)/删除函数 int e; if(S.top=S.base) printf(线性栈为空); e=*-S.top; return S;输出函数void Print_Stack(SqStack S)/打印函数 int i; while(S.base!=S.top) for(i=0;iS.top-S.

8、base;i+) S.top-; printf(%5d,*S.top); printf(n); 库函数* Base.h (程序名) */ #include #include #include /* malloc()等 */ #include /* INT_MAX等 */ #include /* EOF(=Z或F6),NULL */ #include /* atoi() */ #include /* eof() */ #include /* floor(),ceil(),abs() */ #include /* exit() */ /* 函数结果状态代码 */ #define TRUE 1 #d

9、efine FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSEl链栈程序:结构体typedef struct SNode/建立链表结构体 int data; struct SNode *next;SNod

10、e,*LinkStack;主函数#includeBase.h#includeconstruction.h#includeLinkStack_operation.cint main() LinkStack S; int choice,e; S=Creatlist_Stack(); printf(请选择执行的操作,输入1执行入栈操作,输入2执行出栈操作choice=); scanf(%d,&choice); switch(choice) case 1: printf(请输入插入元素的值e=); scanf(%d,&e); S=Push(S,e); printf(执行操作入栈后的线性栈为); Pri

11、nt_Stack(S); ;break; case 2: S=Pop(S); printf(执行出栈操作后的线性栈为); Print_Stack(S); ;break; default : printf(您输入的值不合法n); 创建链栈函数LinkStack Creatlist_Stack()/创建一个链栈 LinkStack S; LinkStack P; int i,n; S=(LinkStack)malloc(sizeof(SNode); S-next=NULL;/* 先建立一个链栈 */ printf(请输入元素个数n=); scanf(%d,&n); printf(请输入%d个数据n

12、,n); i=0; scanf(%d,&S-data); for(i=1;inext=S; S=P; scanf(%d,&S-data); /* 输入元素值 */ return S;入栈函数LinkStack Push(LinkStack S,int e) LinkStack P; if(S=NULL) return ERROR; P=(LinkStack)malloc(sizeof(SNode); P-data=e; P-next=S; S=P; return S;出栈函数LinkStack Pop(LinkStack S) LinkStack P,Q; P=S; S=S-next; fre

13、e(P); return S;输出函数void Print_Stack(LinkStack S) while(S) printf(%5d,S-data); S=S-next; printf(n);库函数* Base.h (程序名) */ #include #include #include /* malloc()等 */ #include /* INT_MAX等 */ #include /* EOF(=Z或F6),NULL */ #include /* atoi() */ #include /* eof() */ #include /* floor(),ceil(),abs() */ #inc

14、lude /* exit() */ /* 函数结果状态代码 */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSEl四 调试分析:输出函数用了语句S-nex

15、t!=NULL改正:语句S!=NULL五 用户手册:看提示内容六 测试结果线性栈:1)请输入元素的个数:4,请输入4个数据 1 2 3 4,请输入执行语句,选择输入1执行入栈操作,选择输入2执行出栈操作choice=1,请输入插入元素的值e=6,执行入栈操作后的线性栈为6 4 3 2 12)请输入元素的个数:4,请输入4个数据 1 2 3 4,请输入执行语句,选择输入1执行入栈操作,选择输入2执行出栈操作choice=2,执行出栈操作后的线性栈为3 2 1链栈:1)请输入元素的个数:4,请输入4个数据 1 2 3 4,请输入执行语句,选择输入1执行入栈操作,选择输入2执行出栈操作choice=1,请输入插入元素的值e=6,执行入栈操作后的线性栈为6 4 3 2 12)请输入元素的个数:4,请输入4个数据 1 2 3 4,请输入执行语句,选择输入1执行入栈操作,选择输入2执行出栈操作choice=2,执行出栈操作后的线性栈为3 2 1

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

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