实验2--栈实验报告.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
实验二 栈 一、实验目的 1、掌握栈的结构特性及其入栈,出栈操作; 2、对栈相应算法的时间复杂度进行分析; 3、理解栈数据结构的特点(优缺点); 4、掌握栈的概念。 二、实验环境 windowsXP microsoft visual studio 三 、实验内容 利用栈实现数据的分类,要求当输入为偶数时进栈当输入为奇数时进栈2,最后分别 从栈1和栈2输出偶数和奇数序列。 栈是限定插入和删除只能在表的"端点"进行的线性表。 栈的定义和特点: 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素 的空表称空栈。 特点:先进后出(FILO)或后进先出(LIFO) 1、顺序栈:栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底至栈顶的 数据元素,即同时附设指针top指示栈顶元素在顺序栈中的位置。类似于线性表的顺序映 象实现,指向表尾的指针可以作为栈顶指针。 //----- 栈的顺序存储表示 ----- #define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; typedef struct { SElemType *base; SElemType *top; int stacksize; } SqStack; 栈底指针base,始终指向栈底位置;栈顶指针top,其初值指向栈底,始终在栈顶元素的下 一个位置。 2、链栈:栈的链式存储结构是利用一个结点指针来实现的,结点由两部分组成,一部分 是结点的数据域,另一部分是指针域,用next指针指示结点的后继,从而实现链式存储 。栈的链式存储结构。栈顶指针就是链表的头指针。 3、入栈函数程序如下: int Push(SqStack *S,ElemType e){ if(S->top-S->base>=S->stacksize){ S->base=(ElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT) *sizeof(ElemType)); if(!S->base) return ERROR; S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT;} *S->top++=e; return OK; }/*Push*/ 4、出栈函数程序如下: int Pop(SqStack *S,ElemType *e){ if(S->top==S->base)return ERROR; *e=*--S->top; return OK; }/*Pop*/ 三、实验运行结果如下 四、算法分析:输入元素序列1 2 3 4 5,为什么输出序列为5 4 3 2 1?体现了栈的什么特性? 答:1、push函数算法分析:它是一个元素入栈函数,首先判断栈是否已满,若栈已满, 就申请栈空间,当输入一个数据时,栈顶指针top加一,始终指向栈顶元素的上面,当1 2 3 4 5入栈后,指针top指在5的上面空格里,此时push函数已执行结束。 2、pop函数算法分析:它是一个元素出栈的函数,首先判断栈是否已空,若栈不为 空,就执行程序中栈顶元素出栈的语句。每次栈顶元素出栈时,栈顶指针top先自减一, 然后把所指元素输出,即执行语句{e=--S->top}。此时,输出序列为5 4 3 2 1。这体现了栈的先进后出,后进先出的特性。 ----------------------- 实验2--栈实验报告全文共3页,当前为第1页。 实验2--栈实验报告全文共3页,当前为第2页。 实验2--栈实验报告全文共3页,当前为第3页。
- 粉丝: 168
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助