数据结构_用堆栈知识实现简单的多项式计算问题

数据结构_用堆栈知识实现简单的多项式计算问题
数据结构_用堆栈知识实现简单的多项式计算问题

数据结构-堆栈和队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法;队列链式存储结构下的基本算法;实验内容: 3-18链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化Stacklnitiate (S), 非空否StackNotEmpty(S),入栈StackiPush(S,x), 出栈StackPop (S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3, 4,5 入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 3-19对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当 前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写一个主函数进行测试。 实验结果: 3-18 typedef struct snode { DataType data; struct snode *n ext; } LSNode; /* 初始化操作:*/

数据结构 实验报告三

实验三的实验报告 学期: 2010 至_2011 第 2 学期 2011年 3月 27日课程名称: 数据结构专业:信息与计算科学 09 级5班实验编号: 03 实验项目:栈和队列实验指导教师 _冯山_姓名:朱群学号: 2009060548 实验成绩: 一实验目的: (1)熟练掌握栈和队列的抽象数据类型及其结构特点; (2)实现基本的栈和队列的基本操作算法程序。 二实验内容:(类C算法的程序实现,任选其一) (1) 设计与实现基本的堆栈和队列结构下的各种操作(如堆栈的PUSH、POP 等操作)(必做); (2)以表达式计算为例,完成一个可以进行算术表达式计算功能的算法设计 与实现(选做); (3)以迷宫问题为例,以堆栈结构完成迷宫问题的求解算法和程序(选做)。三实验准备: 1) 计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分 析与代码设计与分析准备。 四实验步骤: 1.录入程序代码并进行调试和算法分析; 2.编写实验报告。 五实验过程 一设计与实现基本的堆栈结构下的各种操作(如堆栈的PUSH、POP等操作)(1)问题描述 实现堆栈各种基本操作,如Pop,Push,GetTop等操作,即输入数据,通过Push入栈,再通过Pop操作输出出栈的元素,即入栈a,b,c,d,出栈d,c,b,a (2)算法实现及基本思想 堆栈是后进先出的线性表,由Push输入元素,Pop输出元素,堆栈的Push 操作思想,即插入元素e为新的的栈顶元素,先判断栈满与否,追加存储空间,然后将e值赋给栈顶指针Top。输入数据时用for循环 堆栈的Pop操作思想,先判断栈是否为空,若栈不空,则删除栈的栈顶元素,用e返回其值, (3)数据结构 栈的顺序存储结构 Typedef struct {

数据结构与算法-堆栈的操作

《数据结构与算法分析》课程实验报告

【实验目的】 1. 理解堆栈的存储特性。 2. 掌握堆栈的常用操作算法。 【实验内容】 1. 利用堆栈实现对任意进制的数的转换; 2. 堆栈的应用及操作。 【实验方式】 个人实验。 【实验设备与环境】 PC机,Windows XP操作系统,VC++6.0开发环境。 【数据结构及函数定义】 (1)类的定义:类的数据成员,成员函数 …………………………………… (2)主函数main()实现初始化操作,完成对子函数的调用…………………………………… (3)子函数 ………………………………… 【测试数据与实验结果】 (请用截图的方式展示实验结果,并辅以必要的文字说明) 【源程序清单】

(请附上源程序) #include #include #include struct stack { int data; struct stack *next; }; void main() { struct stack *creat();//创建链表函数 void output(struct stack *); struct stack *insert(struct stack *,int);//在栈顶压入元素函数 struct stack *read(struct stack *);//读栈顶元素函数 struct stack *head;

head=creat();//创建链表函数 head->next=NULL; int num,i,n,m; cout<<"输入数据:"; cin>>num; cout<<"输入要将输入数值转换成的进制:"; cin>>i; while(num) {n=num/i; m=num%i; head=insert(head,m);//在栈顶压入元素函数num=n; } output(head); printf("数值经过转换后为:"); while(head->next!=NULL) {head=read(head);} getchar(); cout<

数据结构实验六 堆栈实验

一,实验题目 实验六堆栈实验 设计算法,把一个十进制整数转化为二进制数输出。 二,问题分析 本程序要求将一个十进制整数转化为二进制数输出。完成此功能所要解决的问题是熟练掌握和运用入栈和出栈操作,实现十进制整数转化为二进制数。 (1)数据的输入形式和输入值得范围:输入的是一个十进制整数,且其为正整数。 (2)结果的输出形式:输出的是一个二进制整数 (3)测试数据:1)9 2)4500 三,概要设计 1.为了实现上述程序功能,需要: 构造一个空的顺序栈s 将十进制整数除以2的余数入栈 将余数按顺序出栈 2.本程序包含7个函数: 1)主函数main(); 2)顺序栈判栈空函数stackempty(seqstack *s) 3)顺序栈置空栈函数seqstack *initstack(seqstack *s) 4)顺序栈入栈函数push(seqstack *s,int x) 5)顺序栈出栈函数pop(seqstack *s) 6)顺序栈取栈顶元素函数gettop(seqstack *s) 7)将十进制数转换为二进制数函数setnum(int num) 各函数间关系如下:

四,详细设计 1,顺序表的结构类型定义: typedef struct{ int data[maxlen]; int top; }seqstack; 2,顺序栈入栈函数的伪代码: void push(seqstack *s,int x){ if(s->top<=maxlen-1&&s->top>=-1){ s->top++; s->data[s->top]=x;} else printf("error");} 3,顺序栈出栈函数的伪代码: void pop(seqstack *s){ if(s->top>=0) s->top--; else printf("error"); } 4,将十进制数转换为二进制数函数伪代码: void setnum(int num){ seqstack s; initstack(&s); while(num){ int k=num%2; push(&s,k); num=num/2;} while(!stackempty(&s)){ int x=gettop(&s); printf("%d",x); pop(&s); } } 五,源代码 #include "stdio.h" #define maxlen 100 typedef struct{ //定义顺序栈的结构类型 int data[maxlen]; int top; }seqstack; int stackempty(seqstack *s){ //顺序栈判栈空算法if(s->top>=0) return 0; else return 1; } seqstack *initstack(seqstack *s){ //顺序栈置空栈算法s->top=-1; return s; }

数据结构

《数据结构》综合复习资料 一、填空题 1.数据结构是()。 2.堆栈的特点是(),队列的特点是(),字符串中的数据元素为()。 3.列举三种树的存储方式()、()和()。 4.哈希表查找技术的性能取决于三个因素,它们是()、()和()。 5.ADT称为抽象数据类型,它是指()。 6.求下列程序的时间复杂度,并用大O表示方法表示()。 for( i=1 ; i<=n ; + + i) for( j=1 ; j<=i; + + j ) { ++x; a[i][j] = x; } 7.用堆栈求中缀表达式a+b*c/d+e*f的后缀表达式,求出的后缀表达式为()。 8.含零个字符的串称为()串,用 表示。其他串称为()串。任何串中所含字符的个数称为该串的()。 9.设有字母序列{Q,D,F,X,A,P,N,B,,Y,M,C,W},请写出按2路归并排序方法对该序列进行一趟排序后的结果()。 10.数据的逻辑结构被分为()、()、()和()四种。 11.算法设计的评价标准为()、()、()、()。 12.在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址为(),若假定p为一个数组a中的下标,则其后继结点的下标为()。 13.()通常称作串的模式匹配。在一个主串中查找子串是否存在,存在返回();不存在返回( )。 14.在一棵二叉树中,第5层上的结点数最多为();在一棵二叉树中,假定双分支结点数为5个,单分支结点数为6个,则叶子结点数为()个。 15.对于一个具有n个顶点和e条边的无向图,当分别采用邻接矩阵、邻接表表示时,求任一顶点度数的时间复杂度依次为()、()。 16.给出一组关键字序列{29,18,25,47,58,12,15,10},增量为4的希尔(SHELL)排序结果为()。 17.数据结构的四种基本形式为集合、()、()和()。 18.线性表的常见链式存储结构有()、()和()。 19.设T是一个m*n阶矩阵,T按列序存储在一组连续的存储单元中,每个元素占用w个存储单元,若T[1,1]的存储地址为base,则T[i,j]的存储地址为()。 20.在邻接表上,无向图中顶点vi的度恰为()。对有向图,顶点vi的出度是()。为了求入度,必须遍历整个邻接表,在所有单链表中,其邻接点域的值为()的结点的个数是顶点vi的入度。

数据结构实验报告栈进制转换

数据结构试验报告栈的应用——进制转换程序

if(s->top - s->base >= STACK_INIT_SIZE) { s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) ); if(!s->base) { exit(OVERFLOW); } s->top=s->base + STACKINCREMENT; } * s->top ++ = *e; return OK; } 3.出栈程序 int Pop(Stack *s , int *e) { if(s->top == s->base) { return ERROR; } *e = * -- s->top; return OK;

} 4.主函数与进制转化 void main() { int N; int a; int e; Stack s; InitStack(&s); Pop(&s , &e); Push(&s ,&e); InitStack(&s); printf("请输入十进制数:"); scanf("%d",&N); printf("要将N转化为几进制"); scanf("%d",&a); while(N) { e=N%a; Push( &s , &e ); N = N / a ; }

int *base; int *top; int stacksize; }Stack; int InitStack(Stack *s) { s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!s->base) { exit(OVERFLOW); } s->top=s->base; s->stacksize=STACK_INIT_SIZE; return OK; } int Push(Stack *s , int *e) { if(s->top - s->base >= STACK_INIT_SIZE) { s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) );

堆栈、栈(stack)和堆(heap)三者的区别

一、预备知识(程序的内存分配) 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,其分配方式倒是类似于链表。 3、全局区(静态区static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。 4、文字常量区:常量字符串就是放在这里的。程序结束后由系统释放。 5、程序代码区:存放函数体的二进制代码。 看看下面的例子程序,这是一个前辈写的,非常详细。 //main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char *p2; 栈 char *p3 = "123456"; 123456\0在常量区,p3在栈上。 static int c =0;全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); 分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 } 二、堆和栈的理论知识 2.1、申请方式 stack:由系统自动分配。例如:声明在函数中一个局部变量int b,系统自动在栈中为b开辟空间。heap:需要程序员自己申请,并指明大小,在c中用malloc函数,如p1 = (char *)malloc(10); 在C++中用new运算符:如p2 = (char *)malloc(10); 但是注意p1、p2本身是在栈中的。 2.2 、申请后系统的响应 stack:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报错提示栈溢出。heap:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小。这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 2.3、申请大小的限制 stack:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是

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

实验编号:3四川师大《数据结构》实验报告2016年10月29日 实验三栈和队列及其应用_ 一.实验目的及要求 (1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们; (2)本实验训练的要点是“栈”的观点及其典型用法; (3)掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。 二.实验内容 (1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); (2)应用栈的基本操作,实现数制转换(任意进制); (3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列); (4)利用栈实现任一个表达式中的语法检查(括号的匹配)。 (5)利用栈实现表达式的求值。 注:(1)~(3)必做,(4)~(5)选做。 三.主要仪器设备及软件 (1)PC机 (2)Dev C++ ,Visual C++, VS2010等 四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); A.顺序储存: ?代码部分:

//Main.cpp: #include"SStack.h" int main() { SqStack S; SElemType e; int elect=1; InitStack(S); cout << "已经创建一个存放字符型的栈" << endl; while (elect) { Muse(); cin >> elect; cout << endl; switch (elect) { case 1: cout << "input data:"; cin >> e; Push(S, e); break; case 2:

数据结构实验-栈的基本运算

******************************* 实验题目:栈的基本运算 实验者信息: 班级13007102,姓名庞文正,学号1300710226 实验完成的时间3:00 ****************************** 一、实验目的 1,掌握栈的各种存储结构及基本运算的实现。 2,掌握堆栈后进先出的运算原则在解决实际问题中的应用。3,复习c语言中相关语句及函数的用法。 二、实验内容 括号配对检查。试设计一个程序对任意输入的语句或数学表达式,判断其括号是否匹配。若匹配,则返回1,否则返回0。调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加深对算法的理解。 三、算法设计与编码 1.本实验用到的理论知识 总结本实验用到的理论知识,实现理论与实践相结合。总结尽量简明扼要,并与本次实验密切相关,最好能加上自己的解释。 2.算法概要设计

给出实验的数据结构描述,程序模块、功能及调用关系首先建立一个栈结构,且初始化栈为空。然后由键盘上随即输入一个带括号的语句或带括号的数学表达式,同时将它们保存在一个字符型数组exps[]中。扫描表达式exps,当遇到“(”、“[”、“{”时,将其入栈。遇到“)”、“]”、“}”时,判断栈顶是否有相匹配的括号。若没有,则退出扫描过程,返回0,否则直到exps扫描完毕为止。若top为0,则返回1。 #include #define MAXSIZE 100 #define TRUE 1 #define FALSE 0 typedef int datatype; typedef struct //顺序栈的结构体定义 { datatype stack[MAXSIZE]; int top; }seqstack; void setnull(seqstack *s) //置空栈-由于c语言的数组下标是从0开始的,所以置

数据结构实验报告顺序栈

(封面) 学生实验报告 学院:国际经贸学院 课程名称:数据结构 专业班级:09电子商务 姓名: 学号: 学生实验报告 (经管类专业用) 一、实验目的及要求: 1、目的 通过实验,实现顺序栈的各种基本运算。 2、内容及要求 编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成下列功能: (1)初始化栈S。 (2)判断栈S是否非空。 (3)依次进栈元素a,b,c,d,e。 (4)判断栈S是否非空。 (5)输出栈的长度。

(6)输出从栈顶到栈底的元素。 (7)输出出栈序列; (8)判断链栈S是否为空; (9)释放链栈 二、仪器用具: 三、实验方法与步骤: 一、查阅顺序栈等相关资料,熟悉顺序栈基本概念和流程 二、“开展”顺序栈实验流程 三、整理实验数据和文档,总结实验的过程,编写实验报告 四、实验结果与数据处理: 1、顺序栈的代码: #include #include #define MaxSize 100 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int top; //栈顶指针 } SqStack; void InitStack(SqStack *&s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; }

void ClearStack(SqStack *&s) { free(s); } int StackLength(SqStack *s) { return(s->top+1); } int StackEmpty(SqStack *s) { return(s->top==-1); } int Push(SqStack *&s,ElemType e) { if (s->top==MaxSize-1) return 0; s->top++; s->data[s->top]=e; return 1; } int Pop(SqStack *&s,ElemType &e) { if (s->top==-1) return 0; e=s->data[s->top]; s->top--; return 1; } int GetTop(SqStack *s,ElemType &e) {

C、C++语言实现的数据结构课程设计的计算器(堆栈)

/* // 我真诚地保证: // 我自己独立地完成了整个程序从分析、设计到编码的所有工作。 // 如果在上述过程中,我遇到了什么困难而求教于人,那么,我将在程序实习报告中// 详细地列举我所遇到的问题,以及别人给我的提示。 // 我的程序里中凡是引用到其他程序或文档之处, // 例如教材、课堂笔记、网上的源代码以及其他参考书上的代码段, // 我都已经在程序的注释里很清楚地注明了引用的出处。 // 我从未没抄袭过别人的程序,也没有盗用别人的程序, // 不管是修改式的抄袭还是原封不动的抄袭。 // 我编写这个程序,从来没有想过要去破坏或妨碍其他计算机系统的正常运转。 // <李雷阳> */ /******************************************************************** 用堆栈做的计算器程序 * 创建者:李雷阳* 创建时间:2011.03.12 * 最后修改时间:2011.03.15 * /******************************************************************** /******************************************************************** 本程序功能:实现用堆栈处理计算表达式 具体内容: I: 如果算式里面有计算式不应该出现的字符,则将其智能略去 如:将(1.4a54+2f.6)*3.09s+4ff看成(1.454+2.6)*3.09+4 II: 检查括号是否匹配,如果匹配,再检查是否出现在合法位置 如:(8*(7-4)不匹配,以及65*(72+98)(70-45)匹配但是不合法 III: 检查计算数与计算符号的数量是否合格 如:+23-4* 、23-4*、+23-4 等等 IV: 检查输入小数的时候小数点是否输入过多以及智能改正 如:将3....2*10+8 看成3.2*10+8

数据结构实验三 顺序栈的实现

实验三顺序栈的实现 实验类型:验证性实验学时:2学时 一、实验目的: 掌握顺序栈的基本操作,如进栈、出栈、判断栈空和栈满,取栈顶元素等运算在顺序存储结构上的运算;并能够运用栈的基本操作解决问题,实现相应算法。 二、实验要求: 1、完成顺序栈的基本操作算法并上机调试通过。 2、撰写实验报告,提供实验结果和数据。 三、实验内容: 设计你的栈的顺序存储结构体,编程实现栈的基本操作。栈中的数据元素类型最好为字符类型,方便今后对字符串的算法设计和应用。 测试数据示例: (1) 以“ABCDEFG”的字符串顺序进栈; (2) 以合适顺序出栈得到序列“CDBAGFE”; (3) 取栈顶元素得到‘F’; (4) 进栈直到栈满和出栈直到栈空,检验对这两种情形的正确判断和处理。 [实验要点及说明]:借助实验一线性表的顺序存储程序进行改进 栈(stack):是限定仅在表尾进行插入或删除操作的线性表。 栈顶(Top):允许插入和删除的一端,为变化的一端。 栈底(Bottom):栈中固定的一端。 空栈:栈中无任何元素。 特点:根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。 参考:顺序栈的数据类型C语言描述: #define stacksize 100 //定义栈的最大容量 typedef char elemtype; typedef Struct{ elemtype data[stacksize]; //将栈中元素定义为elemtype类型

数据结构堆栈实验报告

数据结构堆栈实验报告 篇一:数据结构-堆栈和队列实验报告 实验报告 实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法; 队列链式存储结构下的基本算法; 实验内容: 3-18 链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化StackInitiate(S),非空否StackNotEmpty(S),入栈StackiPush(S,x),出栈StackPop(S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法

为:依次把数据元素1,2,3,4,5入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { c(本文来自:小草范文网:数据结构堆栈实验报告)har taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 3-19 对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写一个主函数进行测试。 实验结果: 3-18 typedef struct snode

数据结构栈实验

数据结构实验报告 1. 实验题目 利用链栈解决迷宫最小路径问题 2.需求分析 本程序用vs2008编写,利用入栈、出栈求出从迷宫(随机生成)起点到达迷宫终点的最小路径,并显示。 (1) 输入的形式和输入值的范围; 输入一个整数,表示迷宫的长宽,输入值应大于等于8。 (2) 输出的形式;输入的形式和输入值的范围; 输出迷宫地图及最短路径;若终点不可达,则输出无法找到出口。 (3) 程序所能达到的功能; 求出从迷宫(随机生成)起点到达迷宫终点的最小路径,若终点不可达,则输出无法找到出口。 (4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 A .输入5 B .输入10 C .输入30 D .输入50 E .输入 ’e’,结束 3.概要设计 (1) 栈的抽象数据类型 ADT Stack{ 数据对象:,0,1{|},2,,,0i i D a a ElemSet i n n =∈=???≥ 数据关系:11,,,2,},{,2|i i i i R a a a a D i n n --=<>∈=???≥ 基本操作: InitStack(&S) 操作结果:构造一个空栈。 DestroyStack(&S) 初始条件:栈S 已存在。 操作结果:栈S 被销毁。 ClearStack(&S) 初始条件:栈S 已存在。 操作结果:将栈S 清为空栈。

StackEmpty(S) 初始条件:栈S已存在。 操作结果:若栈S为空栈,则返回TRUE,否则返回FALSE。 GetTop(S,&e) 初始条件:栈S已存在且非空。 操作结果:用e返回S的栈顶元素。 Push(&S,e) 初始条件:栈S已存在。 操作结果:插入元素e为新的栈顶元素。 Pop(&S,&e) 初始条件:栈S已存在且非空。 操作结果:删除S的栈顶元素,并用e返回其值。 StackTraverse(S,visit()) 初始条件:栈S已存在且非空。 操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。 (2) 所涉及函数 ①主函数main() ②栈构造函数Stack() ③栈析构函数~Stack() ④获取栈长度函数Getlength() ⑤入栈函数Push() ⑥出栈函数Pop() ⑦获取栈顶元素函数GetTop() ⑧判断栈是否为空函数StackEmpty() ⑨清空栈函数Clear() ⑩拷贝栈函数CopyStack() ?初始化迷宫函数Initial() ?显示迷宫函数ShowMap() ?寻找迷宫出口函数Found() ?判断下一地点是否通行函数JudgePass() ?移动到下一地点函数Remove() ?回到上一地点函数Back() ?显示路径函数ShowRoad() ?移动Dos窗口光标函数Goxy() ?设置Dos窗口大小函数SetDosSize() ?删除迷宫函数DeleteMap()

数据结构实验——栈(附程序)

实验二栈 一、实验目的 1.了解栈的特性。 2.掌握栈的顺序表示和实现。 3.掌握栈的链式表示和实现。 二、实验内容 实验2.1栈的顺序表示和实现 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈。 (2)插入元素。 (3)删除栈顶元素。 (4)取栈顶元素。 (5)遍历顺序栈。 (6)置空顺序栈。 实验2. 2栈的链式表示和实现 编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化链栈。 (2)链栈置空。 (3)入栈。 (4)出栈。 (5)取栈顶元素。 (6)遍历链栈。

顺序栈 #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct { int *base; int *top; int stacksize; }SqStack; int InitStack(SqStack &S) { S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(!S.base)exit(0); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 0; }//初始化顺序栈 int Push(SqStack &S,int e) { if(S.top-S.base>=S.stacksize) { S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); if(!S.base)exit(0); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return 0; }//插入元素e int Pop(SqStack &S,int e) { if(S.top==S.base)return 0;

数据结构_实验三_栈和队列及其应用

实验编号:3四川师大《数据结构》实验报告2016年10月29日 实验三栈与队列及其应用_ 一.实验目的及要求 (1)掌握栈与队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们; (2)本实验训练的要点就是“栈”的观点及其典型用法; (3)掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。 二.实验内容 (1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); (2)应用栈的基本操作,实现数制转换(任意进制); (3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列); (4)利用栈实现任一个表达式中的语法检查(括号的匹配)。 (5)利用栈实现表达式的求值。 注:(1)~(3)必做,(4)~(5)选做。 三.主要仪器设备及软件 (1) PC机 (2) Dev C++ ,Visual C++, VS2010等 四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页) (1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); A、顺序储存: ?代码部分: //Main、cpp: #include"SStack、h" int main() { SqStack S; SElemType e; int elect=1;

InitStack(S); cout << "已经创建一个存放字符型的栈" << endl; while (elect) { Muse(); cin >> elect; cout << endl; switch (elect) { case 1: cout << "input data:"; cin >> e; Push(S, e); break; case 2: if(Pop(S, e)) {cout << e <<" is pop"<< endl; } else{cout<<"blank"<

《数据结构》栈和队列实验报告

实验报告 课程数据结构 _ 实验名称栈和队列及其应用院系_****** ___ 专业班级__ ***** ______ 实验地点 姓名_______*****________ 学号_____ 实验时间 指导老师 ***** 实验成绩批改日期 一.实验目的 1.熟悉栈的结构及相关算法 2.掌握栈的应用 3.熟悉队列的结构及相关算法 4.掌握队列的应用 二.实验内容及要求 1.根据具体问题实现栈的操作应用 2.根据具体问题实现队列的操作应用 三.实验过程及结果 航空客运订票系统: #include #include #include #include #define MAXSIZE 4/*定义航线量的最大值*/ typedef struct wat_ros { char name[10];/*姓名*/ int req_amt;/*订票量*/ struct wat_ros *next; }qnode,*qptr; typedef struct pqueue { qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的属指针*/ }linkqueue; typedef struct ord_ros { char name[10];/*客户姓名*/ int ord_amt;/*订票量*/ int grade;/*舱位等级*/ struct ord_ros *next; }linklist; struct airline { char ter_name[10];/*终点站名*/ char air_num[10];/*航班号*/ char plane_num[10];/*飞机号*/ char date[7];/*飞行日期(星期几)*/

2数据结构-实验报告二(栈和队列及其应用)

实验二栈和队列及其应用 一、实验目的 1. 掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们。 2. 熟练掌握栈类型的两种实现方法。 3. 熟练掌握循环队列和链队列的基本操作实现算法。 二、实验内容 用队列求解迷宫问题 [问题描述] 以一个M*N的长方阵表示迷宫,0和1分别表示迷宫中的通路和墙壁。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 [基本要求] 实现一个以顺序存储结构的队列类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,pre)的形式输出,其中:(i,j)指示迷宫中的一个坐标,pre表示本路径中上一个方块在队列中的下标。 [测试数据] 由学生任意指定。 三、源代码 # include #define M 5 //行数 #define N 5 //列数 #define MaxSize 100 //队最多元素个数 int mg[M+2][N+2]={ //一个迷宫,其四周要加上均为1的外框{1,1, {1,1,1,1,1,1,1}, {1,0,0,0,0,0,1}, {1,0,1,0,0,1,1},

{1,0,1,0,0,1,1}, {1,0,1,0,1,0,1}, {1,0,0,0,0,0,1}, {1,1,1,1,1,1,1} }; typedef struct {int i,j; int pre;} Box; typedef struct { Box data[MaxSize]; int front, rear; }QuType; void mgpath1(int xi,int yi,int xe,int ye) //搜索路径为:(xi,yi)->(xe,ye) { void print (QuType qu, int front ); int i,j,find=0,di; QuType qu; //定义顺序队 qu.front=qu.rear=-1; qu.rear++; qu.data[qu.rear].i=xi; //(xi,yi)进队 qu.data[qu.rear].j=yi; qu.data[qu.rear].pre=-1; mg[xi][yi]=-1; while(qu.front!=qu.rear&&!find) {qu.front++; i=qu.data[qu.front].i;j=qu.data[qu.front].j; if(i==xe&&j==ye) {find=1; print(qu,qu.front);

数据结构复习题及答案(12级)

一、选择题。(每小题2分,共40分) (1) 计算机识别.存储和加工处理的对象被统称为____A____。 A.数据 B.数据元素 C.数据结构 D.数据类型 (2) 数据结构通常是研究数据的____ A _____及它们之间的联系。 A.存储和逻辑结构 B.存储和抽象 C.理想和抽象 D.理想与逻辑 (3) 不是数据的逻辑结构是____ A ______。 A.散列结构 B.线性结构 C.树结构 D.图结构 (4) 数据结构被形式地定义为,其中D是____ B _____的有限集,R是____ C _____的有限集。 A.算法 B.数据元素 C.数据操作 D.逻辑结构 (5) 组成数据的基本单位是____ A ______。 A.数据项 B.数据类型 C.数据元素 D.数据变量 (6) 设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,<3,4>,<4,1>},则数据结构A是____ A ______。 A.线性结构 B.树型结构 C.图型结构 D.集合 (7) 数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为___ C ____。 A.存储结构 B.逻辑结构 C.顺序存储结构 D.链式存储结构 (8) 在数据结构的讨论中把数据结构从逻辑上分为___ A ____。 A.内部结构与外部结构 B.静态结构与动态结构 C.线性结构与非线性结构 D.紧凑结构与非紧凑结构 (9) 对一个算法的评价,不包括如下____ B _____方面的内容。 A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度 (10) 算法分析的两个方面是__ A ____。 A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 (11) 线性表是具有n个___ C _____的有限序列(n≠0)。 A.表元素 B.字符 C.数据元素 D.数据项 (12) 线性表的存储结构是一种____ B ____的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.HASH存取

数据结构栈和队列实验报告

一、实验目的和要求 (1)理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结构。 (2)重点掌握在顺序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空的条件。 (3)重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队列满和队空的 条件。 (4)灵活运用栈和队列这两种数据结构解决一些综合应用问题。 二、实验环境和方法 实验方法: (一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 (二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。 (三)根据实验内容,编译程序。 实验环境:Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有 错,及时改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”, 根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果 是否正确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容:编译以下题目的程序并调试运行。 1)、编写一个程序algo3-1.cpp,实现顺序栈的各种基本运算,并在此基础上设计一个主程序并完成如下功能: (1)初始化栈s; (2)判断栈s是否非空;

(3)依次进栈元素a,b,c,d,e; (4)判断栈s是否非空; (5)输出出栈序列; (6)判断栈s是否非空; (7)释放栈。图3.1 Proj3_1 工程组成 本工程Proj3_1的组成结构如图3.1所示。本工程的模块结构如图3.2所示。图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。 main InitStack DestroyStack StackEmpty Pus Pop GetTo 图3.2 Proj3_1工程的程序结构图 其中包含如下函数: InitStack(SqStack *&s) //初始化栈S DestroyStack(SqStack *&s) //销毁栈s StackEmpty(SqStack *s) //判断栈空 Push(SqStack *&s,ElemType e) //进栈 Pop(SqStack *&s,ElemType &e) //出栈 GetTop(SqStack *s,ElemType &e) //取栈顶元素 对应的程序如下: //文件名:algo3-1.cpp #include #include #define MaxSize 100 typedef char ElemType; typedef struct {

相关文档
最新文档