本工程proj3_2的组成结构如图3.3所示。本工程的模块结构如图3.4所示。图中方框
表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。 图3.4 proj3_2工程的程序结构图 其中包含如下函数:
initstack(listack *&s) //初始化栈s destroystack(listack *&s) //销毁栈 stackempty(listack *s) //判断栈是否为空 push(listack *&s,elemtype e) //进栈 pop(listack *&s,elemtype &e) //出栈 gettop(listack *s,elemtype &e) //取栈顶元素 对应的程序如下: //文件名:algo3-2.cpp #include <stdio.h> #include <malloc.h> typedef char elemtype; typedef struct linknode {
elemtype data; //数据域篇四:数据结构顺序栈实验报告 一、 设计人员相关信息
1. 设计者姓名、学号和班号:12地信李晓婧 12012242983 2. 设计日期:2014. 3. 上机环境:vc++6.0 二、 程序设计相关信息 1. 实验题目:编写一个程序,实现顺序栈(假设栈中元素类型为char)的各种基本运
算,并在此基础上设计一个程序,完成如下功能: (1)初始化栈
(2)判断栈是否为空
(3)依次进栈元素a,b,c,d,e (4)判断栈是否为空 (5)输出栈长度
(6)输出从栈顶到栈底元素 (7)输出出栈序列 (8)判断栈是否为空 (9)释放栈
2. 实验项目组成:栈的初始化、销毁、判断是否为空、进栈、出栈、取栈顶元素。 3. 实验项目的程序结构(程序中的函数调用关系图): 4. 实验项目包含的各个文件中的函数的功能描述: (1)初始化栈initstack:建立一个新的空栈,实际上将栈顶指针指向-1即可。 (2)销毁栈destroystack:释放栈占用的存储空间 (3)判断栈是否为空stackempty:栈为空的条件是s->op==-1。 (4)进栈push:在栈不满的条件下,先将栈顶指针增1,然后在栈顶指针指向位置插入元素e。
(5)出栈pop:在栈不为空的条件下,先将栈顶元素赋给e,然后将栈顶指针减1. (6)取栈顶元素gettop:在栈不为空的条件下,将栈顶元素赋给e。
5. 算法描述或流程图: #include stdio.h #include malloc.h
#include<stdlib.h> #define maxsize 50
typedef char elemtype; typedef struct
{elemtype data[maxsize]; int top; /*栈顶指针*/ }sqstack; //定义顺序栈类型 void initstack(sqstack*&s)/*初始化*/ {
s=(sqstack*)malloc(sizeof(sqstack)); s->top=-1; //栈顶指针置为-1 } void destroystack(sqstack *&s)/*销毁*/ {
free(s); } int stackempty(sqstack*s)/*判断是否为空*/ {
return(s->top==-1);
} int push(sqstack *&s,elemtype a[],int n) { int i; if(s->top==maxsize-1) //栈满的情况,即栈上溢出 return 0;
for(i=0;i<n;i++) { s->top++; //栈顶指针增1 s->data[s->top]=a[i]; //元素e放在栈顶指针处 } int pop(sqstack*&s,elemtype &e)/*出栈一个元素*/ { if(s->top==-1) //栈为空的情况,即栈下溢出 return 0; e=s->data[s->top]; //取栈顶元素 s->top--; //栈顶指针减1 return 1; }
} return 1; int gettop(sqstack *s,elemtype &e)/*取栈顶元素*/ { if(s->top==-1) //栈为空的情况,即栈下溢出 return 0; e=s->data[s->top]; //取栈顶元素 return 1;
} int stacklength(sqstack *s)/*求栈长度*/ {
return(s->top+1);
} void dispstack(sqstack *s) { } void main() {
int i,j;
elemtype str[5]={a,b,c,d,e}; //定义字符数组 sqstack *st; //定义栈 initstack(st);/*初始化*/ i=stackempty(st); //判断栈是否为空 if(i==0) int i; for(i=s->top;i>=0;i--) printf(%c,s->data[i]);
printf(\\n); printf(顺序栈非空\\n); else printf(顺序栈为空\\n); push(st,str,5); //进栈 j=stackempty(st);
if(j==0) printf(顺序栈非空\\n); else printf(顺序栈为空\\n); printf(栈长度为:%d\\n,stacklength(st)); //输出栈长度 printf(出栈序列:\\n);
dispstack(st); //输出栈 stackempty(st); destroystack(st); } 6. 实验数据和实验结果: 篇五:栈的操作(实验报告) 实验三 栈和队列 3.1实验目的: (1) 熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作
在栈的顺序存储结构和链式存储结构上的实现; (2) 熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的基
本操作在队列的顺序存储结构和链式存储结构上的实现。 3.2 实验要求:
(1) 复习课本中有关栈和队列的知识; (2) 用c语言完成算法和程序设计并上机调试通过; (3) 撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括 时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。 3.3 基础实验 [实验1] 栈的顺序表示和实现 实验内容与要求: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功
能:
(1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈
(6)置空顺序栈 分析:
栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。 对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top= =maxnum-1,
栈满时,不能入栈; 否则出现空间溢出,引起错误,这种现象称为上溢。 出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空
作为一种控制转移的条件。 注意:
(1)顺序栈中元素用向量存放 (2)栈底位置是固定不变的,可设置在向量两端的任意一个端点 (3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶
指针)来指示当前栈顶位置 参考程序:
#include<stdio.h> #include<stdlib.h> #define maxnum 20 #define elemtype int
/*定义顺序栈的存储结构*/ typedef struct
{ elemtype stack[maxnum]; int top; }sqstack;
/*初始化顺序栈*/
void initstack(sqstack *p) { if(!p)
printf(eorror); p->top=-1; }
/*入栈*/
void push(sqstack *p,elemtype x) { if(p->top<maxnum-1) { p->top=p->top+1; p->stack[p->top]=x; } else
printf(overflow!\\n); }
/*出栈*/
elemtype pop(sqstack *p) { elemtype x; if(p->top!=0)
{ x=p->stack[p->top]; printf(以前的栈顶数据元素%d已经被删除!\\n,p->stack[p->top]); p->top=p->top-1; return(x); } else
{ printf(underflow!\\n); return(0); } }
/*获取栈顶元素*/
elemtype gettop(sqstack *p) { elemtype x; if(p->top!=0)
{ x=p->stack[p->top]; return(x); } else
{ printf(underflow!\\n); return(0); } }
/*遍历顺序栈*/
void outstack(sqstack *p) { int i; printf(\\n);
if(p->top<0)
printf(这是一个空栈!); printf(\\n);
for(i=p->top;i>=0;i--) printf(第%d个数据元素是:m\\n,i,p->stack[i]); }
/*置空顺序栈*/
void setempty(sqstack *p) {
p->top= -1; }
/*主函数*/ main()
{ sqstack *q;
int y,cord;elemtype a;