(完整word版)顺序栈基本操作实验报告

合集下载

栈的实验报告结论(3篇)

栈的实验报告结论(3篇)

第1篇一、实验目的1. 理解栈的基本概念和操作;2. 掌握栈的顺序存储和链式存储实现方法;3. 熟悉栈在程序设计中的应用。

二、实验内容1. 栈的顺序存储结构实现;2. 栈的链式存储结构实现;3. 栈的基本操作(入栈、出栈、判空、求栈顶元素);4. 栈在程序设计中的应用。

三、实验方法1. 采用C语言进行编程实现;2. 对实验内容进行逐步分析,编写相应的函数和程序代码;3. 通过运行程序验证实验结果。

四、实验步骤1. 实现栈的顺序存储结构;(1)定义栈的结构体;(2)编写初始化栈的函数;(3)编写入栈、出栈、判空、求栈顶元素的函数;(4)编写测试程序,验证顺序存储结构的栈操作。

2. 实现栈的链式存储结构;(1)定义栈的节点结构体;(2)编写初始化栈的函数;(3)编写入栈、出栈、判空、求栈顶元素的函数;(4)编写测试程序,验证链式存储结构的栈操作。

3. 栈在程序设计中的应用;(1)实现一个简单的四则运算器,使用栈进行运算符和操作数的存储;(2)实现一个逆序输出字符串的程序,使用栈进行字符的存储和输出;(3)编写测试程序,验证栈在程序设计中的应用。

五、实验结果与分析1. 顺序存储结构的栈操作实验结果:(1)入栈操作:在栈未满的情况下,入栈操作成功,栈顶元素增加;(2)出栈操作:在栈非空的情况下,出栈操作成功,栈顶元素减少;(3)判空操作:栈为空时,判空操作返回真,栈非空时返回假;(4)求栈顶元素操作:在栈非空的情况下,成功获取栈顶元素。

2. 链式存储结构的栈操作实验结果:(1)入栈操作:在栈未满的情况下,入栈操作成功,链表头指针指向新节点;(2)出栈操作:在栈非空的情况下,出栈操作成功,链表头指针指向下一个节点;(3)判空操作:栈为空时,判空操作返回真,栈非空时返回假;(4)求栈顶元素操作:在栈非空的情况下,成功获取栈顶元素。

3. 栈在程序设计中的应用实验结果:(1)四则运算器:成功实现加、减、乘、除运算,并输出结果;(2)逆序输出字符串:成功将字符串逆序输出;(3)测试程序:验证了栈在程序设计中的应用。

栈的实验报告

栈的实验报告
if(!s.base) printf("存储分配失败!");
else {
s.top=s.base+s.stacksize;
s.stacksize+=stackincrement; } } *s.top++=e; } void SqStackInfo(sqstack &s) { int *p; p=s.base; printf("输出插入元素后新的栈的元素:\n "); while(p!=s.top) { printf("%d,",*p); p++; } } void SqStackoutfo(sqstack &s) { int *p; p=s.top; printf("输出删除元素后新的栈的元素:\n "); while(p!=s.base) { printf("%d,",*--p); } } void pop(sqstack &s,int &e) { if(s.top==s.base) printf("栈空,不能实现删除元素的操作!"); else { e=*(--s.top); printf("输出删除的元素 e 的值:%d\n",e); } } void main() { sqstack s; int e; int i=0; initstack(s); printf("\n 请输入进栈数据:"); scanf("%d",&e)个个由栈顶元素开始删除;控制位 e 无论取何值(e!=-1),删除的都是栈顶 元素;
心 程序的主要思想能把握,但实际动手去写去运行了就会觉得有点难度.,小错不断。

顺序栈实验报告

顺序栈实验报告

顺序栈实验报告1. 实验目的本实验旨在通过实现顺序栈的基本操作,加深对栈的理解,并学习如何使用顺序栈解决实际问题。

2. 实验内容本实验包含以下内容:1.实现栈的初始化操作,并判断栈是否为空;2.实现入栈操作,将元素插入栈顶;3.实现出栈操作,将栈顶元素删除,并返回删除的元素;4.实现获取栈顶元素的操作,不改变栈的结构;5.实现获取栈的长度操作。

3. 实验步骤3.1 栈的初始化首先,我们需要定义一个顺序栈的结构体,其中包括栈的容量、栈顶指针和存放元素的数组。

栈的容量可以根据实际需要进行调整,栈顶指针初始值为-1。

#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int top;} SqStack;然后,我们可以编写初始化栈的函数:void InitStack(SqStack *s) {s->top = -1;}3.2 判断栈是否为空我们可以通过栈顶指针的值是否等于-1来判断栈是否为空,编写如下函数:int IsEmpty(SqStack *s) {if (s->top == -1) {return1;} else {return0;}}3.3 入栈操作入栈操作即将元素插入栈顶。

在插入元素前,我们需要判断栈是否已满。

若栈未满,则将元素插入栈顶,并更新栈顶指针的值。

编写如下函数:int Push(SqStack *s, int x) {if (s->top == MAX_SIZE - 1) {return0; // 栈满,插入失败} else {s->top++;s->data[s->top] = x;return1; // 插入成功}}3.4 出栈操作出栈操作即将栈顶元素删除,并返回删除的元素。

在删除元素前,我们需要判断栈是否为空。

若栈不为空,则将栈顶元素删除,并更新栈顶指针的值。

编写如下函数:int Pop(SqStack *s, int *x) {if (IsEmpty(s)) {return0; // 栈空,删除失败} else {*x = s->data[s->top];s->top--;return1; // 删除成功}}3.5 获取栈顶元素获取栈顶元素不改变栈的结构,只需要返回栈顶指针对应的元素即可。

栈的实验报告

栈的实验报告

栈的实验报告一、实验目的本次实验的主要目的是深入理解栈这种数据结构的基本概念和操作原理,并通过实际编程实现来巩固对栈的特性和应用的掌握。

二、实验环境本次实验使用的编程语言为C++,编程环境为Visual Studio 2019。

三、实验原理栈(Stack)是一种特殊的线性表,其操作遵循“后进先出”(Last In First Out,LIFO)的原则。

栈只允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),另一端则被称为栈底(Bottom)。

栈的基本操作包括:1、`Push`(入栈):将元素添加到栈顶。

2、`Pop`(出栈):删除并返回栈顶元素。

3、`Top`(获取栈顶元素):返回栈顶元素,但不删除它。

4、`IsEmpty`(判断栈是否为空):如果栈为空,返回`true`,否则返回`false`。

四、实验内容与步骤1、定义栈的数据结构```cppclass Stack {private:int stackArray;int top;int capacity;public:Stack(int size) {capacity = size;stackArray = new intcapacity; top =-1;}~Stack(){delete stackArray;}void Push(int element) {if (top == capacity 1) {std::cout <<"Stack Overflow!"<< std::endl; return;}stackArray++top = element;}int Pop(){if (IsEmpty()){std::cout <<"Stack Underflow!"<< std::endl; return -1;}int element = stackArraytop;stackArraytop = 0;return element;}int Top(){if (IsEmpty()){std::cout <<"Stack is empty!"<< std::endl; return -1;}return stackArraytop;}bool IsEmpty(){return top ==-1;}void PrintStack(){for (int i = top; i >= 0; i) {std::cout << stackArrayi <<"";}std::cout << std::endl;}};```2、测试栈的基本操作```cppint main(){Stack stack(5);stackPush(10);stackPush(20);stackPush(30);std::cout <<"Top element: "<< stackTop()<< std::endl;stackPop();std::cout <<"Top element after pop: "<< stackTop()<<std::endl;stackPrintStack();return 0;}```五、实验结果与分析在实验过程中,我们成功地实现了栈的基本操作,并对其进行了测试。

栈和队列基本操作实验报告

栈和队列基本操作实验报告

栈和队列基本操作实验报告实验目的1. 了解栈和队列的基本概念和特点;2. 掌握栈和队列的基本操作,包括插入、删除、判空、判满等;3. 加深对数据结构的理解,提高编程能力。

实验原理1. 栈(Stack)是一种“先进后出”(Last In First Out,简称LIFO)的数据结构,类似于一摞盘子,最先放入的盘子在最底下,最后放入的盘子在最上面,取出盘子时也是从上往下取出。

2. 队列(Queue)是一种“先进先出”(First In First Out,简称FIFO)的数据结构,类似于排队,先来的人先进队列,后来的人排在后面,服务员按照队列顺序依次为每个人提供服务。

实验内容1. 栈的实现栈的基本操作包括入栈(push)、出栈(pop)、判空(empty)、栈顶(top)。

本次实验选择使用顺序栈来实现,并通过代码模拟栈的基本操作。

在顺序栈的实现中,需要设置栈顶指针(top)、初始化栈、入栈、出栈、判空、判满等操作,其中最关键的是入栈和出栈操作。

入栈操作:在栈顶指针(top)的位置加1,将元素e放到栈顶```void push(SqStack &s, ElemType e){if (s.top == MAXSIZE - 1) // 栈满return;s.top++; // 栈顶指针加1s.data[s.top] = e; // 将元素e放到栈顶return;}```出队操作:将队头元素弹出,队头指针(front)加1实验结果1. 栈的实现通过栈的实现,我们可以进行压入和弹出元素的操作。

下面是一段示例代码:通过本次实验,我学会了栈和队列的基本概念和特点,掌握了栈和队列的基本操作,如插入、删除、判空、判满等。

这些基本操作是数据结构中的重要部分,对于算法的实现与性能优化都有很大的帮助。

此外,在实现中,我们还需要注意栈和队列指针的变化,以及对于空栈和空队列的处理。

通过本次实验,我加深了对数据结构的理解,同时也提升了编程能力。

【最新推荐】顺序栈实验报告word版本 (13页)

【最新推荐】顺序栈实验报告word版本 (13页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==顺序栈实验报告篇一:数据结构顺序栈实验报告一、设计人员相关信息1. 设计者姓名、学号和班号:12地信李晓婧 1201X2429832. 设计日期:201X.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 50typedef 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++; //栈顶指针增1s->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--; //栈顶指针减1return 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)); //输出栈长度。

栈的建立实验报告

栈的建立实验报告

一、实验目的本次实验旨在通过编程实现栈的顺序存储结构和链式存储结构,并熟练掌握栈的基本操作,包括栈的建立、入栈、出栈、取栈顶元素、判栈空等。

通过实验,加深对栈这一数据结构的理解,提高数据结构在实际问题中的应用能力。

二、实验内容1. 顺序栈的建立与基本操作(1)顺序栈的建立顺序栈使用一维数组来实现,其大小为栈的最大容量。

在建立顺序栈时,需要初始化栈顶指针top为-1,表示栈为空。

(2)顺序栈的基本操作① 入栈操作(Push)当栈未满时,将新元素插入到栈顶,同时栈顶指针top加1。

② 出栈操作(Pop)当栈非空时,将栈顶元素出栈,同时栈顶指针top减1。

③ 取栈顶元素操作(GetTop)当栈非空时,返回栈顶元素。

④ 判栈空操作(IsEmpty)当栈顶指针top为-1时,表示栈为空。

2. 链式栈的建立与基本操作(1)链式栈的建立链式栈使用链表来实现,每个节点包含数据域和指针域。

在建立链式栈时,需要创建一个头节点,其指针域为空。

(2)链式栈的基本操作① 入栈操作(Push)当栈为空时,创建新节点作为栈顶节点;当栈非空时,将新节点插入到头节点的下一个节点,同时修改头节点的指针域。

② 出栈操作(Pop)当栈非空时,删除头节点的下一个节点,同时修改头节点的指针域。

③ 取栈顶元素操作(GetTop)当栈非空时,返回头节点的下一个节点的数据域。

④ 判栈空操作(IsEmpty)当头节点的指针域为空时,表示栈为空。

三、实验步骤1. 编写顺序栈和链式栈的建立函数。

2. 编写顺序栈和链式栈的基本操作函数。

3. 编写测试程序,验证顺序栈和链式栈的基本操作。

四、实验结果与分析1. 顺序栈实验结果通过编写顺序栈的建立和基本操作函数,成功实现了顺序栈的入栈、出栈、取栈顶元素、判栈空等操作。

在测试程序中,依次进行入栈、出栈、取栈顶元素等操作,均能正确执行。

2. 链式栈实验结果通过编写链式栈的建立和基本操作函数,成功实现了链式栈的入栈、出栈、取栈顶元素、判栈空等操作。

栈的基本操作实验报告

栈的基本操作实验报告

栈的基本操作实验报告
《栈的基本操作实验报告》
实验目的:
通过本次实验,我们旨在掌握栈的基本操作,包括入栈、出栈、获取栈顶元素
等操作,并理解栈的特点和应用场景。

实验内容:
1. 入栈操作:将元素依次压入栈顶;
2. 出栈操作:从栈顶弹出元素;
3. 获取栈顶元素:不改变栈的状态,获取栈顶元素的值;
4. 判断栈空:判断栈是否为空;
5. 判断栈满:判断栈是否已满。

实验步骤:
1. 初始化一个栈;
2. 将元素依次入栈;
3. 依次进行出栈操作,观察栈的变化;
4. 获取栈顶元素,并进行判断栈空和栈满操作。

实验结果:
经过实验,我们成功掌握了栈的基本操作。

我们发现栈具有后进先出(LIFO)
的特点,适合于一些需要后续处理的数据结构,比如递归函数调用、表达式求
值等场景。

同时,我们也发现了栈的容量限制,需要在使用时注意栈是否已满。

结论:
栈是一种非常重要的数据结构,掌握了栈的基本操作能够帮助我们更好地理解
和应用它。

通过本次实验,我们对栈的特点和应用场景有了更深入的了解,相信在今后的学习和工作中能够更好地运用栈来解决问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Status push_operate(SqStack &s,SElemType e);
Status push_num(SqStack &s,int e);
Status Stackempty(SqStack &s);
Status pop_num(SqStack &s,int &c);
Status pushoperate(SElemType operate);
{
Push(S,c);
}
GetTop(S,c);
cout<<"栈顶元素为:"<<c<<endl;
//ClearStack (S);
//DsetroyStack(S);
for(int i=0;S.top!=S.base;i++)
{
Pop(S,c);
cout<<"栈中第"<<i+1<<"元素的值:";
cout<<c<<endl;
char Precede(SElemType a,SElemType b);
char Operatecxz();
int m;
m=Operatecxz();
cout<<m<<endl;
return 0;
}
Status change(SElemType e)
{
int m;
m=e-48;
return m;
if(s.top==s.base)
return NO;
c=*--s.top;
return OK;
}
char GetTop(SqStack &s)
{
char c;
if(s.top==s.base)
return NO;
c=*(s.top-1);
return c;
}
Status caculate(int a,SElemType operate,int b)
}
return 0;
}
第二题:
#include<iostream>
using namespace std;
#define STACK_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -1
#define OK 1
#define NO 0
typedef int Status;
}//Push
Status Pop(SqStack &S,SElemType &c)
//若栈不空,则删除S的栈顶元素,用c返回其值,并返回OK;否则返回ERROR
{
if(S.top==S.base)
return NO;
c=*--S.top;
return OK;
}//Pop
Status GetTop(SqStack &S,SElemType &e)
return OK;
if(c>='0'&&c<='9')
return NO;
return -1;
}
char Precede(SElemType a,SElemType b)
{
if(a=='+'||a=='-')
{
if(b=='+'||b=='-'||b==')'||b=='#')
return '>';
if(!s.base)
exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return OK;
}
Status push_operate(SqStack &s,SElemType e)
{
if(s.top-s.base>=s.stacksize)
b)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。
c)若是其它字符,则返回错误信息。
(3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。
程序中应主要包含下面几个功能函数:
l void initstack():初始化堆栈
l int Make_str():语法检查并计算
} SqStack;
Status Initstack(SqStack &S)//构造一个空栈S
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize= STACK_INIT_SIZE;
Status pushnum(SElemType num);
Status caculate(SElemType a,SElemType operate,SElemType b);
Status pop_operate(SqStack &s,SElemType &c);
Status change(SElemType e);
if(b=='*'||b=='/'||b=='(')
return '<';
}
if(a=='*'||a=='/')
{
if(b=='+'||b=='-'||b==')'||b=='*'||b=='/'||b=='#')
return '>';
if(b=='(')
return '<';
}
if(a=='(')
{
if (S.top==S.base)
return NO;
e=*(S.top-1);
return OK;
}//GetTop
int main()
{
SqStack S;
Initstack(S);
cout<<"输入要压到栈中的元素!"<<endl;
char c;
while((c=getchar())!='\n')
}
*s.top++=e;
return OK;
}
Status pop_operate(SqStack &s,SElemType &c)
{
if(s.top==s.base)
return NO;
c=*--s.top;
return OK;
}
Status pop_num(SqStack &s,int &c)
{
第一题:
#include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
#define OVERFLOW -1
#define OK 1
#define NO -1
数据结构实验三
课程数据结构实验名称顺序栈基本操作第页
专业班级学号
姓名
实验日期:年月日评分
一、实验目的
1.熟悉并能实现栈的定义和基本操作。
2.了解和掌握栈的应用。
二、实验要求
1.进行栈的基本操作时要注意栈"后进先出"的特性。
2.编写完整程序完成下面的实验内容并上机运行。
3.整理并上交实验报告。
三、实验内容
{
if(b==')')
return '=';
if(b=='+'||b=='-'||b=='*'||b=='/')
return '<';
if(b=='#')
return ' ';
}
if(a==')')
{
if(b==')')
return ' ';
if(b=='+'||b=='-'||b=='*'||b=='/'||b=='('||b=='#')
1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。
2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。
主要功能描述如下:
(1)从键盘上输入表达式。
(2)分析该表达式是否合法:
a)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。
}
Status Initstack(SqStack &s)
{
s.base=(SElemType *)malloc(STACK_SIZE*sizeof(SElemType));
相关文档
最新文档