实验三 栈

合集下载

栈和队列的实验报告

栈和队列的实验报告

栈和队列的实验报告栈和队列的实验报告引言:栈和队列是计算机科学中常用的数据结构,它们在算法设计和程序开发中起着重要的作用。

本实验旨在通过实际操作和观察,深入理解栈和队列的概念、特点以及它们在实际应用中的作用。

一、栈的实验1.1 栈的定义和特点栈是一种具有特殊操作约束的线性数据结构,它的特点是“先进后出”(Last-In-First-Out,LIFO)。

栈的操作包括入栈(push)和出栈(pop),入栈操作将元素放入栈顶,出栈操作将栈顶元素移除。

1.2 实验步骤在本次实验中,我们使用编程语言实现了一个栈的数据结构,并进行了以下实验步骤:1.2.1 创建一个空栈1.2.2 向栈中依次压入若干元素1.2.3 查看栈顶元素1.2.4 弹出栈顶元素1.2.5 再次查看栈顶元素1.3 实验结果通过实验,我们观察到栈的特点:最后入栈的元素最先出栈。

在实验步骤1.2.2中,我们依次压入了元素A、B和C,栈顶元素为C。

在实验步骤1.2.4中,我们弹出了栈顶元素C,此时栈顶元素变为B。

二、队列的实验2.1 队列的定义和特点队列是一种具有特殊操作约束的线性数据结构,它的特点是“先进先出”(First-In-First-Out,FIFO)。

队列的操作包括入队(enqueue)和出队(dequeue),入队操作将元素放入队尾,出队操作将队头元素移除。

2.2 实验步骤在本次实验中,我们使用编程语言实现了一个队列的数据结构,并进行了以下实验步骤:2.2.1 创建一个空队列2.2.2 向队列中依次插入若干元素2.2.3 查看队头元素2.2.4 删除队头元素2.2.5 再次查看队头元素2.3 实验结果通过实验,我们观察到队列的特点:最先入队的元素最先出队。

在实验步骤2.2.2中,我们依次插入了元素X、Y和Z,队头元素为X。

在实验步骤2.2.4中,我们删除了队头元素X,此时队头元素变为Y。

三、栈和队列的应用栈和队列在实际应用中有广泛的应用场景,下面简要介绍一些常见的应用:3.1 栈的应用3.1.1 表达式求值:通过栈可以实现对表达式的求值,如中缀表达式转换为后缀表达式,并计算结果。

实验报告

实验报告

实验报告课题名称:数据结构与算法班级:09网络工程姓名:杨益良学号:2009181105指导老师:梁海丽实验一:线性表的顺序存储一、实验目的1.掌握用C语言调试程序的基本方法。

2.掌握线性表顺序存储的基本运算,如插入、删除等。

二、实验内容线性表在顺序存储结构上的插入元素,删除元素运算三、实验要求1.C++/C完成算法设计和程序设计并上机调试通过。

2.撰写实验报告,提供实验结果和数据。

3.分析算法,要求给出具体的算法分析结果,并简要给出算法设计小结和心得。

四、源程序#include<stdio.h>#define MAXSIZE 100int list[MAXSIZE];int n;/*insert in a seqlist*/int sq_insert(int list[], int *p_n, int i, int x){int j;if (i<0 || i>*p_n) return(1);if (*p_n==MAXSIZE) return(2);for (j=*p_n+1; j>i; j--)list[j]=list[j-1];list[i]=x;(*p_n)++;return(0);}/*delete in a seq list*/int sq_delete(int list[], int *p_n, int i){int j;if (i<0 || i>=*p_n) return(1);for (j = i+1; j<=*p_n; j++)list[j-1] = list[j];(*p_n)--;return(0);}void main(){int i,x,temp;printf("please input the number for n\n");printf("n=");scanf("%d",&n);for (i=0; i<=n; i++){printf("list[%d]=",i);scanf("%d",&list[i]);}printf("The list before insertion is\n");for (i=0; i<=n; i++) printf("%d ",list[i]);printf("\n");printf("please input the position where you want to insert a value\nposition=");scanf("%d",&i);printf("please input the value you want to insert.\nx=");scanf("%d",&x);temp=sq_insert(list,&n,i,x);switch(temp){case 0:printf("The insertion is successful!\n");printf("The list is after insertion is\n");for(i=0; i<=n; i++) printf("%d ",list[i]);printf("\n");printf("%d\n",n);break;case 1:case 2:printf("The insertion is not successful!\n");break;}/*deleting*/printf("The list before deleting is\n");for (i=0; i<=n; i++) printf("%d ",list[i]);printf("\n");printf("please input the position where you want to delete a value\nposition=");scanf("%d",&i);temp=sq_delete(list,&n,i);switch(temp){case 0:printf("The deleting is successful!\n");printf("The list is after deleting is\n");for(i=0; i<=n; i++) printf("%d ",list[i]);printf("\n");printf("%d",n);break;case 1:printf("The deleting is not successful!");break;}}五、程序运行情况六、实验结果分析在顺序表中插入一个元素后,插入位置及之后的元素后移表长增长1;在顺序表中删除一个元素后,插入位置及之前的元素左移,表长减1;在该实验通过c语言调试程序了解并掌握了线性表在顺序存储结构上插入元素、删除元素的算法设计及相关程序设计和实现方法。

《数据结构》实验指导书

《数据结构》实验指导书
四、实验说明
1.单链表的类型定义
#include <stdio.h>
typedef int ElemType;//单链表结点类型
typedef struct LNode
{ElemType data;
struct LNode *next;
2.明确栈、队列均是特殊的线性表。
3.栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验四 串
一、预备知识
1.字符串的基本概念
2.字符串的模式匹配算法
二、实验目的
1.理解字符串的模式匹配算法(包括KMP算法)
typedef struct
{ElemType *base;
int front,rear;
} SqQueue;
4.单链队列的类型定义
typedef struct QNode
{QElemType data;
typedef struct list
{ElemType elem[MAXSIZE];//静态线性表
int length; //顺序表的实际长度
} SqList;//顺序表的类型名
五、注意问题
1.插入、删除时元素的移动原因、方向及先后顺序。
4.三元组表是线性表的一种应用,通过它可以更好地理解线性表的存储结构。同时矩阵又是图的重要的存储方式,所以这个实验对更好地掌握线性表对将来对图的理解都有极大的帮助。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验六 树和二叉树
一、预备知识
1.二叉树的二叉链表存储结构

数据结构实验报告实验总结

数据结构实验报告实验总结

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。

通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。

下面对每一部分实验进行总结。

实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。

在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。

实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。

通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。

实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。

通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。

实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。

通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。

通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。

同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。

在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。

通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。

总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。

在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。

实验三 实现顺序栈的插入和删除算法

实验三 实现顺序栈的插入和删除算法

实验三顺序栈的插入和删除算法一.实验目的:掌握栈在顺序存储结构上的插入和删除运算。

二.实验要求:1. 给出程序设计的基本思想、原理和算法描述。

2. 画出程序流程图;根据数据结构有关知识编出算法程序;3. 源程序给出注释。

4. 保存和打印出程序的运行结果,并结合程序进行分析。

三.实验内容:1.编写函数实现顺序栈中的插入(入栈);2.编写函数实现顺序栈中的删除(出栈);3.编写程序实现以下功能:(1) 创建一个顺序栈:22,33,45,99,8;(2) 调用插入函数,令元素58入栈;(3) 调用删除函数,删除栈顶的三个元素;(4) 输出最终顺序栈中的元素。

算法分析:进栈,判断栈是否已满,若栈满,则进行溢出处理,若栈未满,将栈顶指针加一,将新元素送入到栈顶指针所指的位置。

出栈,判断栈是否为空,若栈空,进行下溢处理,若栈不空,将栈顶元素赋给变量,将栈顶指针退一。

流程图:源程序:#include<stdio.h>#include<stdlib.h>#define MAXSIZE 50/*定义数组长度*/int stack[MAXSIZE];/*栈元素的数据类型*/ int top;void push(int x){if(top==MAXSIZE-1){printf("栈满溢出\n");exit(1);}else{top++;stack[top]=x;}}int pop(){int x;if(top==-1){printf("栈空溢出\n");exit(1);}else{x=stack[top];top--;}return x;}main(){ int i;top=0;printf("请输入顺序栈\n");for(i=1;i<=5;i++){scanf("%d",&stack[i]);top++;}push(58);for(i=1;i<=top;i++)printf("%3d",stack[i]);/*输出删除后的数组*/printf("\n");for(i=1;i<=3;i++)pop();for(i=1;i<=top;i++)printf("%3d",stack[i]);printf("\n");}实验小结:通过本次实验让我对栈的算法有了进一步了解,让我受益良多。

数据结构实验三栈和队列的应用

数据结构实验三栈和队列的应用

数据结构实验三栈和队列的应用数据结构实验三:栈和队列的应用在计算机科学领域中,数据结构是组织和存储数据的重要方式,而栈和队列作为两种常见的数据结构,具有广泛的应用场景。

本次实验旨在深入探讨栈和队列在实际问题中的应用,加深对它们特性和操作的理解。

一、栈的应用栈是一种“后进先出”(Last In First Out,LIFO)的数据结构。

这意味着最后进入栈的元素将首先被取出。

1、表达式求值在算术表达式的求值过程中,栈发挥着重要作用。

例如,对于表达式“2 + 3 4”,我们可以通过将操作数压入栈,操作符按照优先级进行处理,实现表达式的正确求值。

当遇到数字时,将其压入操作数栈;遇到操作符时,从操作数栈中弹出相应数量的操作数进行计算,将结果压回操作数栈。

最终,操作数栈中的唯一值就是表达式的结果。

2、括号匹配在程序代码中,检查括号是否匹配是常见的任务。

可以使用栈来实现。

遍历输入的字符串,当遇到左括号时,将其压入栈;当遇到右括号时,弹出栈顶元素,如果弹出的左括号与当前右括号类型匹配,则继续,否则表示括号不匹配。

3、函数调用和递归在程序执行过程中,函数的调用和递归都依赖于栈。

当调用一个函数时,当前的执行环境(包括局部变量、返回地址等)被压入栈中。

当函数返回时,从栈中弹出之前保存的环境,继续之前的执行。

递归函数的执行也是通过栈来实现的,每次递归调用都会在栈中保存当前的状态,直到递归结束,依次从栈中恢复状态。

二、队列的应用队列是一种“先进先出”(First In First Out,FIFO)的数据结构。

1、排队系统在现实生活中的各种排队场景,如银行排队、餐厅叫号等,可以用队列来模拟。

新到达的顾客加入队列尾部,服务完成的顾客从队列头部离开。

通过这种方式,保证了先来的顾客先得到服务,体现了公平性。

2、广度优先搜索在图的遍历算法中,广度优先搜索(BreadthFirst Search,BFS)常使用队列。

从起始节点开始,将其放入队列。

实验三 栈应用 实验报告

实验三 栈应用 实验报告

行编辑程序实验报告一、实验内容和目的实验目的:掌握栈的储存结构及其描述掌握栈的建立、插入和删除操作实验内容:1. 栈的建立2. 入栈和出栈操作3. 清空栈操作二、实验原理利用栈的特性(后进先出),把用户输入的字符储存到栈中,并通过事先规定好的字符(如’#’,’@’)对栈中的数据进行操作,实现行编辑器的功能。

当用户输入的不是事先约定的控制符,则把该字符进行入栈操作;当用户输入的是约定的退格符(本实验中的退格符为’#’),把栈顶元素出栈,从而实现删除字符的操作;当用户输入的是约定的退行符(本实验中的退格符为’@’),则清空栈,实现整行删除的功能。

当用户按下回车(即输入换行符’\n’时),即表明用户输入完毕,然后依次把栈中元素从栈底到栈顶输出。

三、程序流程图四、实验结果4.1 程序的主界面4.2 输入whli##ilr#e(s#*s) 以后五、操作说明本程序处理范围仅限于一行字符,回车即表示全部字符输入结束。

程序运行以后,程序出于等待输入的状态(程序会提示“请在下面输入内容”),输入您要编辑的内容。

按回车输入结束在输入期间,如果要退格,请在英文输入法状态下输入符号’#’,如果要清空整行的所有字符,同样地,请在英文输入法状态下输入符号’@’,会清空前面输入所有的字符。

所有的字符输入完成以后,按下回车键。

程序会处理所有的数据,并将处理以后所有的有效数据进行输出。

六、附录:代码#include<stdio.h>#include<stdlib.h>#define MAX_STACK_SIZE 200#define OK 0#define MALLOC_FAIL 1// 表示栈上溢#define OVERFLOW 1// 表示栈下溢#define UNDERFLOW -1typedef char SElemType;typedef struct {SElemType *base;SElemType *top;int stacksize;} SqStack;/* 栈基本功能的实现*/// 栈的初始化// 如果初始化成功,返回OK;如果不成功,返回MALLOC_FAILint Stack_Init(SqStack *stack){// 为栈分配空间stack->base = (SElemType *)malloc(MAX_STACK_SIZE * sizeof(SElemType));// 如果不能分配到空间:返回错误信息if (!stack->base)return MALLOC_FAIL;stack->top = stack->base;stack->stacksize = 0;// 初始化成功,返回成功信息return OK;}// 清空栈void Stack_Clear(SqStack *stack){stack->top = stack->base;stack->stacksize = 0;}// 把元素e 插入到栈stack 里面// 如果栈已满,返回OVERFLOW// 元素成功存入栈,返回OKint Stack_Push(SqStack *stack, SElemType e){// 如果栈已满,返回错误信息if (stack->stacksize == MAX_STACK_SIZE)return OVERFLOW;// 把元素储存到栈里面,top 指针移动,计数加一*(stack->top++) = e;stack->stacksize++;return OK;}// 把栈顶元素赋值给e,再在栈里删除栈顶元素// 如果栈已空,返回UNDERFLOW// 如果元素成功出栈,返回OKint Stack_Pop(SqStack *stack, SElemType *e){// 如果栈已空,返回错误信息if (stack->stacksize == 0)return UNDERFLOW;// 把栈顶元素储存到e 中,然后top 指针下移*e = *(--stack->top);stack->stacksize--;return OK;}/* 程序功能的实现*/int main(){SqStack *stack = (SqStack *)malloc(sizeof(SqStack));SElemType e, tmp;int i;// 如果栈空间分配失败,退出程序if (!stack){printf("分配栈空间发生错误\n");system("pause");exit(0);}// 如果栈初始化失败,退出程序if (Stack_Init(stack) != OK){printf("栈初始化发生错误\n");system("pause");exit(0);}printf("输入错误时,可以输入'#' 删除前一个字符,输入'@' 则把整行内容清除\n按回车表示输入结束\n");printf("\n请在下面输入内容:\n");// 从键盘读入一个字符,如果不是换行符,进行循环while ((e = getchar()) != '\n'){if (e == '#'){Stack_Pop(stack, &tmp);printf("\b");}else if (e == '@')Stack_Clear(stack);else// 如果栈满,输出提示信息,并停止读入字符if (Stack_Push(stack, e) == OVERFLOW){printf("栈已满!\n");break;}}printf("\n输入的有效内容为:\n");// 将栈中的所有元素从栈底开始输出for (i = 0; i < stack->stacksize; i++)putchar(stack->base[i]);printf("\n\n");system("pause");return 0;}。

实验三 栈的基本操作

实验三 栈的基本操作

实验三栈的基本操作实验三栈的基本运算学号:0700710319 姓名:梁浩然实验日期:2021年5月6日一、实验目的:(1)掌握栈的各种存储结构及基本运算的实现。

(2)掌握堆栈后进先出的运算原则在解决实际问题中的应用。

(3)复习c语言中相关语句及函数的用法。

(4)进一步熟悉c语言的相关知识,能够把某些c语言知识应用得自如一点。

(5)一定要自己先完成实验的课后习题,认真的思考,能够达到独立思考。

二、实验要求:(1)熟练掌握栈的存储结构及其基本操作。

(2)理解所给出的算法,掌握栈在实际中的应用。

(3)将上机程序调试通过,并能独立完成一至两个拓展题目。

(4)一定要读书老师所给出来的程序。

三、实验内容:认真阅读数据结构的课本,熟悉所学的知识,认真复习c语言的相关的知识,然后对括号配对检查。

试设计一个程序对任意输入的语句或数学表达式,判断其括号是否匹配。

若匹配,则返回1,否则返回0。

调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对算法的理解。

四、实验步骤:首先建立一个栈结构,且初始化栈为空。

然后由键盘上随即输入一个带括号的语句或带括号的数学表达式,同时将它们保存在一个字符型数组exps[]中。

扫描表达式exps,当遇到“(”、“[”、“{”时,将其入栈。

遇到“)”、“]”、“}”时,判断栈顶是否有相匹配的括号。

若没有,则退出扫描过程,返回0,否则直到exps扫描完毕为止。

若top为0,则返回1。

(程序略)五、实验预期的效果:(1)认真的研究实验所给的程序;(2)能读懂实验所给的程序,并且自己可以在计算机上调试成功;(3)根据实验所学的知识能做好老师布置给我们的作业,编写程序并且调试出来运行成功。

(4)在试验后自己要认真的总结该次实验所收获的东西。

六、实验方法实验所给程序修改如下:#include \#define MAXSIZE 100 #define TRUE 1 #define FALSE 0 #define NULLtypedef int datatype;typedef struct /*顺序栈的结构体类型定义*/ {datatype stack[MAXSIZE];int top; }seqstack;void setnull(seqstack *s) //置空栈-由于c语言的数组下标是从0开始的,所以置 {s->top=-1;} //空栈操作时将栈顶指针放在下标为0之前,即-1处。

实验报告(3)

实验报告(3)

数据结构上机实验报告实验三栈和队列班级:13级计本二班姓名:杨宴强学号:201392130129实验三栈和队列一、实验目的:⒈学习顺序栈的基本操作2.学习链栈的基本操作3.学习循环队列基本操作4.学习链队列基本操作二、实验内容:⒈顺序栈的基本运算2.链栈的基本操作3.循环队列的基本运算4.链队列的基本运算三、实验步骤及结果:1:顺序栈#include"stdio.h"#include"stdlib.h"#define MAXSIZE 20typedef struct{char data[MAXSIZE];//栈中元素存储空间int top;//栈顶指针}SeqStack;//顺序栈类型void Init_SeqStack(SeqStack **s)//顺序栈初始化{*s=(SeqStack*)malloc(sizeof(SeqStack));//在主函数中申请栈空间(*s)->top=-1;//置栈空标志}int Empty_SeqStack(SeqStack*s)//判断栈是否为空{if(s->top==-1)//栈为空时return 1;//返回1elsereturn 0;//返回0}void Push_SeqStack(SeqStack *s,char x)//顺序栈入栈{if(s->top==MAXSIZE-1)//判断是否栈满printf("Stack is full!\n");//栈已满else{s->top++;//s指向下个节点s->data[s->top]=x;//元素x压入栈*s中}}void Pop_SeqStack(SeqStack *s,char *x)//将栈*s中的栈顶元素出栈并通过参数x返回给主调函数{if(s->top==-1)//栈空返回1printf("Stack is empty!\n");//栈为空else{*x=s->data[s->top];//栈顶元素出栈s->top--;//栈顶指针top-1}}void Top_SeqStack(SeqStack *s,char *x)//取顺序栈栈顶元素{if(s->top==-1)//栈空返回1printf("Stack is empty!\n");//栈为空else{*x=s->data[s->top];//取栈顶元素值}}void print(SeqStack *s)//顺序栈输出{int i;//定义变量ifor(i=0;i<=s->top;i++)//判断printf("%4d",s->data[i]);//读入数据printf("\n");//输出栈}void main(){SeqStack *s;//定义指针schar x,*y=&x;//y是指向x的指针,出栈元素经过y传给变量xInit_SeqStack(&s);//顺序栈初始化if(Empty_SeqStack(s))//判断栈是否为空printf("Stack is empty!\n");printf("Input data of stack:\n");//顺序栈元素入栈scanf("%c",&x);//读入数据while(x!='\n')//对x的计数直到\n结束{Push_SeqStack(s,x);//x入栈scanf("%c",&x);}printf("Output all data of stack:\n");//提示print(s);//输出顺序栈中的元素Pop_SeqStack(s,y);//顺序栈元素出栈printf("Output data of Pop stack:%c\n",*y);//输出出栈元素printf("Output all data of stack:\n");print(s);//输出出栈后顺序栈中的元素Top_SeqStack(s,y);//读取顺序栈栈顶元素printf("Output data of top stack:%c\n",*y);//输出读出的栈顶元素printf("Output all data of stack:\n");print(s);//输出当前的顺序栈中的元素}2链栈#include<stdio.h>#include<stdlib.h>typedef struct node{char data;struct node*next;}StackNode;//链栈元素类型void Init_LinkStack(StackNode**s)//链栈初始化{*s=NULL;}int Empty_LinkStack(StackNode*s)//判断链栈是否为空{if(s==NULL)return 1;elsereturn 0;}void Push_LinkStack(StackNode**top,char x)//链栈元素入栈{StackNode*p;p=(StackNode*)malloc(sizeof(StackNode));//生成存储空间p->data=x;p->next=*top;//新生成的栈顶元素*p其后继为原栈顶元素**top *top=p;//栈顶指针*top指向新的栈顶元素*p}void Pop_LinkStack(StackNode**top,char*x)//链栈元素出栈{StackNode*p;if(*top==NULL)printf("Stack is empty!\n");//栈空else{*x=(*top)->data;//栈顶元素经指针x传给对应的变量p=*top;*top=(*top)->next;free(p);}}void print(StackNode*p)//链栈输出{while(p!=NULL){printf("%c,",p->data);p=p->next;}printf("\n");}void main(){StackNode*s;char x,*y=&x;//出栈元素经指针y传给xInit_LinkStack(&s);//链栈初始化if(Empty_LinkStack(s))//判断链栈是否为空printf("Stack is empty!\n");printf("Input any string:\n");//链栈元素入栈scanf("%c",&x);while(x!='\n'){Push_LinkStack(&s,x);scanf("%c",&x);}printf("Output string:\n");//链栈输出print(s);printf("Output stack:\n");Pop_LinkStack(&s,y); //链栈元素出栈printf("Element of Output stack is %c\n",*y);//输出出栈元素printf("Output string:\n");print(s);//链栈输出}3循环队列#include"stdio.h"#include"stdlib.h"#define MAXSIZE 20typedef struct{char data[MAXSIZE];//队头元素存储空间int rear,front;//队尾和队头指针}SeQueue;//顺序队列类型void Int_SeQueue(SeQueue**q)//置空队{*q=(SeQueue*)malloc(sizeof(SeQueue));//生成循环队列的存储空间(*q)->front=0;//队尾与队头指针相等则为队空(*q)->rear=0;}int Empty_SeQueue(SeQueue*q)//判队空{if(q->front==q->rear)//判断是否队空return 1;//队空elsereturn 0;//队不空}void In_SeQueue(SeQueue*q,char x)//元素入队{if((q->rear+1)%MAXSIZE==q->front)//判断是否队满printf("Queue is full!\n");//队满,入队失败else{q->rear=(q->rear+1)%MAXSIZE;//队尾指针加1q->data[q->rear]=x;//将元素X入队}}void Out_SeQueue(SeQueue*q,char*x)//元素出队{if(q->front==q->rear)//判断是否队空printf("Queue is empty");//队空,出队失败else{q->front=(q->front+1)%MAXSIZE;//队头指针加1*x=q->data[q->front];//队头元素出对并由x返回队头元素值}}void print(SeQueue*q)//循环队列输出{int i;//定义变量ii=(q->front+1)%MAXSIZE;//i入队while(i!=q->rear)//判断队空{printf("%4c\n",q->data[i]);//读入数据信息i=(i+1)%MAXSIZE;//逐步累加}printf("%4c\n",q->data[i]);//输出}void main(){SeQueue*q;//定义指针qchar x,*y=&x;//出对元素经指针y传给xInt_SeQueue(&q);//循环队列初始化if(Empty_SeQueue(q))//判队空printf("Queue is empty!\n");//提示printf("Input any string:\n");//给循环队列输入元素scanf("%c",&x);while(x!='\n'){In_SeQueue(q,x);//元素入队scanf("%c",&x);}printf("Output elements of Queue:\n");print(q);//循环队列输出printf("Output Queue:\n");Out_SeQueue(q,y);//循环队列元素出队printf("Element of Output Queue is %c\n",*y);//输出出队元素printf("Output elements of Queue:\n");print(q);//输出出队后的循环队列元素}4.链队列#include"stdio.h"#include"stdlib.h"#define MAXSIZE 30typedef struct node{char data;struct node *next;}QNode;//链队列结点类型typedef struct{QNode *front,*rear;//将头、尾指针纳入到一个结构体的链队列}LQueue;//链队列类型void Init_LQueue(LQueue **q)//创建一个带头结点的空队列{QNode *p;*q=(LQueue*)malloc(sizeof(LQueue));//申请带头、尾指针的结点p=(QNode*)malloc(sizeof(QNode));//申请链队列的头结点p->next=NULL;//头结点的next指针置为空(*q)->front=p;//队头指针指向头结点(*q)->rear=p;//队尾指针指向头结点}int Empty_LQueue(LQueue *q)//判队空{if(q->front==q->rear)return 1;//队为空elsereturn 0;}void In_LQueue(LQueue *q,char x)//入队{QNode *p;p=(QNode*)malloc(sizeof(QNode));//申请新链队列结点p->data=x;p->next=NULL;//新结点作为队尾结点时其next域为空q->rear->next=p;//将新结点*p链到原队尾结点之后q->rear=p;//是队尾指针指向新的队尾结点*p}void Out_LQueue(LQueue *q,char *x)//出队{QNode *p;if(Empty_LQueue(q))printf("Queue is empty!\n");//队空,出队失败else{p=q->front->next;//指针p指向队头结点q->front->next=p->next;//头结点的next指针指向链队列的第二个数据结点*x=p->data;//将删除的队头结点数据经由指针x返回free(p);if(q->front->next==NULL)//出队后队为空,则置为空队列q->rear=q->front;}}void print(LQueue *q)//链队列输出{QNode *p;p=q->front->next;while(p!=NULL){printf("%4c",p->data);p=p->next;}printf("\n");}void main(){LQueue *q;char x,*y=&x;//出队元素经指针y传给xInit_LQueue(&q);//链队列初始化if(Empty_LQueue(q))//判队空printf("Queue is empty!\n");printf("Input any string:\n");//给链队列输入元素scanf("%c",&x);while(x!='\n'){In_LQueue(q,x);scanf("%c",&x);//元素入队}printf("Output elements of Queue:\n");print(q);//链队列输出printf("Output Queue:\n");Out_LQueue(q,y);//元素出队printf("Element of Output Queue is %c\n",*y);//输出出队的元素值printf("Output elements of Queue:\n");print(q);//输出出队后链队列的元素}四、实验总结:通过本次试验,了解了栈和队列的基本操作。

栈和队列实验报告

栈和队列实验报告

栈和队列实验报告引言:计算机科学中的数据结构是解决问题的关键。

栈和队列这两种常用的数据结构,无疑在许多实际应用中起着重要的作用。

本篇报告旨在探讨栈和队列的实验结果,并展示它们的实际应用。

一、栈的实验结果及应用1. 栈的实验结果在实验中,我们设计了一个基于栈的简单计算器,用于实现基本的四则运算。

通过栈的先进后出(Last In First Out)特性,我们成功实现了表达式的逆波兰表示法,并进行了正确的计算。

实验结果表明,栈作为一个非常有效的数据结构,可以很好地处理栈内数据的存储和检索。

2. 栈的应用栈在计算机科学中有许多实际应用。

其中之一是程序调用的存储方式。

在程序调用过程中,每个函数的返回地址都可以通过栈来保存和恢复。

另一个应用是浏览器的历史记录。

浏览器中每个访问网页的URL都可以通过栈来存储,以便用户能够追溯他们之前访问的网页。

二、队列的实验结果及应用1. 队列的实验结果在实验中,我们模拟了一个简单的出租车调度系统,利用队列的先进先出(First In First Out)特性实现乘客的排队和叫车。

实验结果表明,队列作为一个具有高效性和可靠性的数据结构,能够很好地处理排队问题。

2. 队列的应用队列在许多方面都有应用。

一个常见的应用是消息队列。

在网络通信中,消息队列可以用于存储和传递信息,确保按照特定的顺序进行处理。

另一个应用是操作系统的进程调度。

操作系统使用队列来管理各个进程的执行顺序,以实现公平和高效的资源分配。

三、栈和队列的比较及选择1. 效率比较栈和队列在实际应用中的效率取决于具体问题的需求。

栈的操作更简单,仅涉及栈顶元素的插入和删除,因此具有更高的执行速度。

而队列涉及到队头和队尾元素的操作,稍复杂一些。

但是,队列在某些问题中的应用更为广泛,例如调度问题和消息传递问题。

2. 如何选择在选择栈和队列时,需要根据实际问题的性质和需求进行综合考虑。

如果问题需要追溯历史记录或按照特定顺序进行处理,则应选择栈作为数据结构。

栈的实验报告心得(3篇)

栈的实验报告心得(3篇)

第1篇一、实验背景栈(Stack)是一种先进后出(First In Last Out,FILO)的数据结构,它是计算机科学中常用的数据存储方式之一。

在栈中,元素的插入和删除操作只能在栈顶进行。

本实验旨在通过编程实现栈的基本操作,加深对栈的理解和应用。

二、实验目的1. 理解栈的基本概念和特点。

2. 掌握栈的基本操作,如入栈、出栈、判断栈空、判断栈满等。

3. 熟悉栈在实际问题中的应用,提高编程能力。

三、实验内容1. 栈的定义与实现2. 栈的基本操作a. 入栈(Push)b. 出栈(Pop)c. 判断栈空(IsEmpty)d. 判断栈满(IsFull)e. 获取栈顶元素(Peek)3. 栈的应用实例四、实验过程1. 栈的定义与实现首先,我们需要定义一个栈的数据结构。

在C语言中,可以使用结构体(struct)来实现栈:```cdefine MAX_SIZE 100 // 定义栈的最大容量typedef struct {int data[MAX_SIZE]; // 存储栈元素的数组int top; // 栈顶指针} Stack;```2. 栈的基本操作(1)入栈(Push)入栈操作将一个元素添加到栈顶。

在执行入栈操作之前,需要判断栈是否已满。

如果栈未满,则将元素添加到栈顶;如果栈已满,则返回错误信息。

```cint Push(Stack s, int value) {if (s->top == MAX_SIZE - 1) {return -1; // 栈满}s->data[++s->top] = value; // 将元素添加到栈顶return 0; // 成功入栈}```(2)出栈(Pop)出栈操作将栈顶元素移除。

在执行出栈操作之前,需要判断栈是否为空。

如果栈不为空,则将栈顶元素移除;如果栈为空,则返回错误信息。

```cint Pop(Stack s, int value) {if (s->top == -1) {return -1; // 栈空}value = s->data[s->top--]; // 移除栈顶元素return 0; // 成功出栈}```(3)判断栈空(IsEmpty)判断栈空操作用于判断栈是否为空。

栈和队列123

栈和队列123

实验报告填写内容时,可把表格扩大。

实验的源程序代码(要有注释)附在表后。

题目一程序代码:#include"stdio.h"#include"malloc.h"#define MAXSIZE 100typedef char elemtype;typedef struct{elemtype data[MAXSIZE];int top;}SeqStack;typedef struct{elemtype data[MAXSIZE];int front,rear;}SeqQueue;SeqStack *InitStack(SeqStack *S){S=(SeqStack *)malloc(sizeof(SeqStack));S->top=-1;return(S);}int Push(SeqStack *S,int item){if(S->top==MAXSIZE-1){printf("Stack overflow\n");return 0;}else{S->data[++S->top]=item;return 1;}}elemtype Pop(SeqStack *S){if(S->top==-1){printf("Stack is empty.\n");return 0;}else{S->top--;return(S->data[S->top+1]);}}SeqQueue *InitQueue(SeqQueue *Q){Q=(SeqQueue *)malloc(sizeof(SeqQueue));Q->front=Q->rear=0;return(Q);}int EnQueue(SeqQueue *Q,elemtype item){if((Q->rear+1)%MAXSIZE==Q->front){printf("Queue overflow");return(0);}else{Q->data[Q->rear]=item;Q->rear=(Q->rear+1)%MAXSIZE;return(1);}}elemtype DeQueue(SeqQueue *Q){elemtype item;if(Q->rear==Q->front){printf("Queue is emtype");return(0);}else{item=Q->data[Q->front];Q->front=(Q->front+1)%MAXSIZE;return(item);}}int huiwen(){elemtype a,b,c;int i=0,n=0,t=1;SeqStack *S;SeqQueue *Q;S=InitStack(S);Q=InitQueue(Q);printf("Please input the item:");scanf("%c",&c);while(c!='@'){EnQueue(Q,c);Push(S,c);scanf("%c",&c);n++;}for(i=0;i<n;i++){a=Pop(S);b=DeQueue(Q);if(a!=b) t=0;}if(t!=0) return(1);else return(0);}main(){int a;printf("Ruanjian Gongcheng XX 3100305210 \n");a=huiwen();if(a==1) printf("Yes");else printf("No");getchar();getchar();}题目一程序代码:#include"stdio.h"#include"malloc.h"#define MAXSIZE 100typedef int elemtype;typedef struct{elemtype data[MAXSIZE];int top;}SeqStack;SeqStack *InitStack(SeqStack *S){S=(SeqStack *)malloc(sizeof(SeqStack));S->top=-1;return(S);}int StackEmpty(SeqStack *S){if(S->top==-1){return 0;}else{return 1;}}int Push(SeqStack *S,int item){if(S->top==MAXSIZE-1){printf("Stack overflow\n");return 0;}else{S->data[++S->top]=item;return 1;}}elemtype Pop(SeqStack *S){if(S->top==-1){printf("Stack is empty.\n");return 0;}else{S->top--;return(S->data[S->top+1]);}}void zhuanhuan(int n,int i){int a,k;SeqStack *S;S=InitStack(S);while(n!=0){a=n%i;Push(S,a);n=n/i;}while(1){k=StackEmpty(S);if(k==0) break;else{a=Pop(S);printf("%d",a);}}}main(){int i,n,t,z;elemtype q;SeqStack *P;P=InitStack(P);printf("Ruanjian Gongcheng XX 3100305210\nPlease input a number:");scanf("%d",&n);printf("Please input another number:");scanf("%d",&i);zhuanhuan(n,i);getchar();getchar();}。

栈的应用实验报告

栈的应用实验报告

栈的应用实验报告栈的应用实验报告引言:栈是一种常见的数据结构,它具有后进先出(Last In First Out,LIFO)的特点。

在计算机科学中,栈被广泛应用于各种领域,如编译器、操作系统、图形处理等。

本实验旨在通过实际应用场景,探索栈的应用。

一、栈的基本概念和操作栈是一种线性数据结构,它由一系列元素组成,每个元素都有一个前驱元素和一个后继元素。

栈的基本操作包括入栈(Push)和出栈(Pop)。

入栈将元素添加到栈的顶部,而出栈则将栈顶元素移除。

此外,栈还具有查看栈顶元素(Top)和判断栈是否为空(IsEmpty)的操作。

二、栈在表达式求值中的应用栈在表达式求值中发挥着重要作用。

例如,当我们需要计算一个数学表达式时,可以通过将表达式转换为后缀表达式,并利用栈来进行求值。

栈中存储操作数,当遇到运算符时,从栈中弹出相应数量的操作数进行计算,再将结果入栈。

通过这种方式,我们可以实现高效的表达式求值。

三、栈在函数调用中的应用栈在函数调用中也扮演着重要角色。

当我们调用一个函数时,计算机会将函数的返回地址、参数和局部变量等信息存储在栈中。

这样,当函数执行完毕后,可以从栈中恢复之前的上下文,继续执行调用函数的代码。

栈的这种特性使得递归函数的实现成为可能,同时也为程序的模块化提供了便利。

四、栈在迷宫求解中的应用栈在迷宫求解中也能发挥重要作用。

当我们需要找到从起点到终点的路径时,可以利用栈来存储当前路径上的位置。

从起点开始,我们按照某种策略选择下一个位置,并将其入栈。

如果当前位置无法继续前进,则将其出栈,并选择下一个位置。

通过不断重复这个过程,直到找到终点或者栈为空,我们就能得到迷宫的解。

五、栈在撤销和恢复操作中的应用栈在撤销和恢复操作中也能发挥重要作用。

当我们在编辑文档或者绘图时,经常需要进行撤销和恢复操作。

栈可以用来记录每次操作的状态,当用户选择撤销时,从栈中弹出最近的操作,并将文档或图形恢复到之前的状态。

通过这种方式,我们可以提供良好的用户体验,同时也方便用户进行操作的回溯。

可编程序控制器(PLC)实验报告

可编程序控制器(PLC)实验报告

可编程序控制器实验报告**:**学号:*************实验一认识FXGP与PLC一.实验目的:1.熟悉FXGP的操作界面2.熟悉FXGP菜单的显示和操作方式3.注意观察FXGP系统提供的信息4.学会设置路径、新建程序5.初步学习用指令表、梯形图方式编制PLC程序6.理解指令表和梯形图的对应关系7.掌握FXGP中的程序传送到PLC的方法8.通过实验了解和熟悉FX系列PLC的外部结构和外部接线方法9.熟悉简易编程器的使用。

10. 掌握调试程序的方法二.实验内容(一)使用FXGP软件编辑程序1.设置文件路径为C:\PLC12.进入FXGP软件3.新建一个序程序,指定正确的PLC类型,程序名称[untit101] 4.用梯形图形式编辑如下一段程序5、通过转换,在指令表形式下阅读程序:LD X000AND X001LDI X000AND X002ORBLD X007OR Y000ANBAND X006OUT Y000LDI X004AND X005MPSAND Y000OUT C0MRDAND X010OUT Y001MPPAND Y001RST C0AND C0OUT Y002END关于PLc的说明:PLC的硬件基本组成; (一)中央处理单元(CPU)(二)存储器(三)输入接口电路(四)输出接口电路(五)电源(六)编程器PLC的软件结构:(一)系统监控程序(二)用户程序PLC的供电电源是一般市电,也有用直流24伏供电的,PLC对电源稳定要求度不高,一般允许电源电压额定值在10%之间波动。

PLC的输入电路:一般有三种类型一种是直流12——24V输入,另一种是交流100——120,200——240V输入,第三种是交直流输入。

PLC的输出也有三种形式,即继电器输出,晶体管输出,晶闸管输出。

FX-20P-E手持式编程器(简称HPP)可以用于FX系列PLC,也可以通过转换器FX-20P-E-FKIT用于F1、F2系列PLC。

顺序栈基本操作实验报告【精选文档】

顺序栈基本操作实验报告【精选文档】

数据结构实验三课程数据结构实验名称顺序栈基本操作第页专业班级学号姓名实验日期:年月日评分一、实验目的1.熟悉并能实现栈的定义和基本操作。

2.了解和掌握栈的应用。

二、实验要求1.进行栈的基本操作时要注意栈”后进先出"的特性。

2.编写完整程序完成下面的实验内容并上机运行。

3.整理并上交实验报告。

三、实验内容1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。

2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。

主要功能描述如下:(1)从键盘上输入表达式。

(2)分析该表达式是否合法:•a) 是数字,则判断该数字的合法性。

若合法,则压入数据到堆栈中。

•b)是规定的运算符,则根据规则进行处理。

在处理过程中,将计算该表达式的值.•c) 若是其它字符,则返回错误信息。

(3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。

程序中应主要包含下面几个功能函数:•l void initstack():初始化堆栈•l int Make_str():语法检查并计算•l int push_operate(int operate):将操作码压入堆栈•l int push_num(double num):将操作数压入堆栈•l int procede(int operate):处理操作码•l int change_opnd(int operate):将字符型操作码转换成优先级•l int push_opnd(int operate):将操作码压入堆栈•l int pop_opnd():将操作码弹出堆栈•l int caculate(int cur_opnd):简单计算+,—,*,/•l double pop_num():弹出操作数四、实验步骤(描述实验步骤及中间的结果或现象。

在实验中做了什么事情,怎么做的,发生的现象和中间结果)第一题:#include 〈iostream>using namespace std;#define STACK_INIT_SIZE 100 //存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量#define OVERFLOW —1#define OK 1#define NO —1#define NULL 0typedef int Status;typedef char SElemType;typedef struct{SElemType *base;//在栈构造之前和销毁之后,base的值为NULLSElemType *top; //栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位}SqStack;Status Initstack(SqStack &S)//构造一个空栈S{S。

栈实验心得体会优质7篇

栈实验心得体会优质7篇

栈实验心得体会优质7篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作计划、述职报告、演讲稿、心得体会、合同协议、条据文书、策划方案、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays for everyone, such as work plans, job reports, speeches, insights, contract agreements, documents, planning plans, teaching materials, complete essays, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!栈实验心得体会优质7篇写心得体会让我们能够更好地理解自己的情感和思维方式,心得体会的反思有助于我们建立积极的自我形象,培养乐观的心态,本店铺今天就为您带来了栈实验心得体会优质7篇,相信一定会对你有所帮助。

实验三栈和队列

实验三栈和队列

实验三栈和队列
1、参考工程shiyan03_1,其中StackEmpty ( )、StackLength ( ) 、GetTop ( )、Push ( )、Pop( )未实现,请将其完善,并设计一个主程序实现如下功能:
(1)初始化栈S。

(2)判断栈S是否非空。

(3)依次进栈元素a,b,c,d,e。

(4)判断栈S是否非空。

(5)输出栈的长度。

(6)输出从栈顶到栈底的元素。

(7)输出出栈序列。

(8)判断栈S是否非空。

(9)释放栈。

2、参考工程shiyan03_2,编写实现链队列的各种基本运算的程序LinkQueue.cpp,并在此基础上设计一个主程序实现如下功能:
(1)初始化队列Q。

(2)判断队列Q是否非空。

(3)依次进队元素a,b,c。

(4)出队一个元素,输出该元素。

(5)输出队列Q的元素个数。

(6)依次进队元素d,e,f。

(7)输出队列Q的元素个数。

(8)输出出队序列。

(9)释放队列。

3、编写工程shiyan03_3,实现顺序循环队列的各种基本运算,并在此基础上设计一个主程序实现如下功能:
(1)初始化队列Q。

(2)判断队列Q是否非空。

(3)依次进队元素a,b,c。

(4)出队一个元素,输出该元素。

(5)输出队列Q的元素个数。

(6)依次进队元素2,0,0,9,1,0,0,1。

(7)输出队列Q的元素个数。

(8)输出出队序列。

(9)释放队列。

栈实验心得体会模板6篇

栈实验心得体会模板6篇

栈实验心得体会模板6篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如述职报告、调研报告、策划方案、活动方案、心得体会、应急预案、规章制度、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as job reports, research reports, planning plans, activity plans, personal experiences, emergency plans, rules and regulations, teaching materials, complete essays, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!栈实验心得体会模板6篇在记录心得的时候,保证理性的分析,是十分重要的,写心得体会可以让我们更好地应对挫折和困难,本店铺今天就为您带来了栈实验心得体会模板6篇,相信一定会对你有所帮助。

基于栈结构的中缀表达式求值

基于栈结构的中缀表达式求值

实验三基于栈结构的中缀表达式求值班级:计科131、问题描述从键盘输入一中缀表达式字符串,读字符串,利用栈结构实现表达式求值。

2、输入与输出输入:从键盘中缀表达式如: 32+5×(6-4)输出:计算结果423、需求分析1.定义两个栈结构,数栈用于存放表达式中的数,符号栈用于存放表达式中的符号,实现栈的运算2.在读数的时候考虑多位运算3.实现表达式求值4、开发工具与环境硬件设备:微型计算机系统软件环境:操作系统Windows,开发工具等等5、概要设计1.结构定义typedef struct /* 运算符栈 */{ char *base,*top;int stacksize;}SqStack;typedef struct /* 运算数栈 */{ int *base,*top;int stacksize;}SqStack1;int priority[7][7]={{'>', '>', '<', '<', '<', '>', '>'}, // +{'>', '>', '<', '<', '<', '>', '>'}, // -{'>', '>', '>', '>', '<', '>', '>'}, // *{'>', '>', '>', '>', '<', '>', '>'}, // /{'<', '<', '<', '<', '<', '=', }, // ({'>', '>', '>', '>', ' ', '>', '>'}, // ){'<', '<', '<', '<', '<', ' ', '='} // #};/*用于比较符号优先级的全局二维数组*/2.各函数模块void InitStack(SqStack *s);操作结果:初始化运算符栈。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三栈
实验名称:栈
一、实验目的
1.掌握实现栈的基本操作方法
2.掌握栈的基本操作:建栈,Push,Pop等运算在顺序存储结构上的实现
二、实验内容
1.利用C#语言编写顺序栈类,并对顺序栈类的操作进行使用测试。

三、要求
1.上机前完成所有的函数编写
2.实验名称:栈的基本操作
3.实验目的:同一
4.实验内容:同二,另在此部分中将课前编写的算法写上,若写不完,可以在实验记录中
接着完成
5.主要实验设备(软件)部分填写:装有Visual Studio2005软件的普通PC机
6.实验记录部分填写编写Main函数调用各个类操作的屏幕输出
7.设备名称填写PC机,型号可空,编号填写所使用计算机编号,运行情况填写良好
8.实验总结部分填写对该次实验所编写类的运行情况,和在实验过程中对线性表的认识和
实现情况
四、实验步骤
(一)创建顺序栈
1.打开Visual Studio2005界面,创建类文件SeqStack.cs(具体方法参见实验一相关内容)
2.打开SeqStack.cs文件,在文件中创建顺序栈类SeqStack
3.参考类文件如下:
public class SeqStack
{
private int maxSize; //顺序栈的容量
private char[] data; //数组,用于存储顺序栈的数据元素,这里存储的只有字符型
private int top; //指示顺序栈的栈顶
public int MaxSize //最大容量属性
{
get { return maxSize; }
set { maxSize = value; }
}
public int Top //栈顶属性
{
get { return top; }
}
//构造函数
public SeqStack(int size)
{
data =new char[size];
maxSize = size;
top = -1;
}
//求顺序栈的长度
public int GetLength()
{
return top + 1;
}
//清空顺序栈
public void Clear()
{
top = -1;
}
//判断顺序栈是否为空
public bool IsEmpty()
{
if (top == -1)
return true;
else
return false;
}
//判断顺序栈是否为满
public bool IsFull()
{
if (top == maxSize - 1)
return true;
else
return false;
}
//入栈
public void Push(char item)
{
if (top == maxSize - 1)
{
Console.WriteLine("The Stack is full!");
return;
}
top++;
data[top] = item;
}
//出栈
public char Pop()
{
if (IsEmpty())
{
Console.WriteLine("The Stack is empty!");
return' ';
}
char item = data[top];
top--;
return item;
}
//获取栈顶数据元素
public char GetTop()
{
if (IsEmpty())
{
Console.WriteLine("The Stack is empty!");
return' ';
}
return data[top];
}
}
4.测试所编写代码是否有编译错误
5.编写应用程序入口,方法参照实验一实验步骤中的第10小步。

编写UseStack类,在此
类中编写Main方法以调用SeqStack类
6.有能力的同学可以试着编写利用堆栈将输入的十进制数转换为二进制数并输出(可参考
电子版教材的相关例子)。

相关文档
最新文档