数据结构出栈、入栈实验报告

合集下载

栈的实验报告结论(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)测试程序:验证了栈在程序设计中的应用。

栈的获取实验报告(3篇)

栈的获取实验报告(3篇)

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

2. 掌握栈的顺序存储结构和链式存储结构。

3. 熟悉栈的基本操作,包括入栈、出栈、判断栈空等。

4. 通过实验,加深对栈在计算机科学中的应用理解。

二、实验内容1. 实现栈的顺序存储结构,包括初始化、入栈、出栈、判断栈空等操作。

2. 实现栈的链式存储结构,包括初始化、入栈、出栈、判断栈空等操作。

3. 设计并实现一个递归算法,求解斐波那契数列的前n项。

4. 设计并实现一个算法,判断一个字符串是否为回文。

三、实验步骤1. 实现栈的顺序存储结构(1)定义栈的结构体,包含栈的最大容量、栈顶指针、栈底指针、栈元素数组等。

(2)编写栈的初始化函数,初始化栈的最大容量、栈顶指针和栈底指针。

(3)编写入栈函数,判断栈是否已满,若未满则将元素压入栈顶。

(4)编写出栈函数,判断栈是否为空,若不为空则将栈顶元素弹出。

(5)编写判断栈空函数,判断栈顶指针是否等于栈底指针。

2. 实现栈的链式存储结构(1)定义栈的节点结构体,包含数据域和指针域。

(2)编写栈的初始化函数,初始化栈头节点。

(3)编写入栈函数,判断栈是否已满,若未满则创建新节点并插入链表头部。

(4)编写出栈函数,判断栈是否为空,若不为空则删除链表头部节点。

(5)编写判断栈空函数,判断栈头节点是否为空。

3. 实现递归算法求解斐波那契数列(1)编写递归函数,计算斐波那契数列的第n项。

(2)调用递归函数,计算斐波那契数列的前n项。

4. 实现判断字符串是否为回文的算法(1)编写一个辅助函数,判断两个字符串是否相等。

(2)将字符串逆序,并判断逆序后的字符串是否与原字符串相等。

四、实验结果与分析1. 顺序栈的实验结果通过实现顺序栈,我们成功完成了初始化、入栈、出栈、判断栈空等操作。

实验结果表明,顺序栈在空间利用上较为高效,但在插入和删除操作时,需要移动栈中元素,时间复杂度为O(n)。

2. 链栈的实验结果通过实现链栈,我们成功完成了初始化、入栈、出栈、判断栈空等操作。

栈的实验报告

栈的实验报告

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

二、实验环境本次实验使用的编程语言为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;}```五、实验结果与分析在实验过程中,我们成功地实现了栈的基本操作,并对其进行了测试。

数据结构顺序栈验证实验报告

数据结构顺序栈验证实验报告

数据结构顺序栈验证实验报告数据结构顺序栈验证实验报告一、实验目的本实验旨在验证数据结构中顺序栈的基本操作和特性,包括入栈、出栈、判空、判满等操作。

二、实验原理顺序栈是一种采用数组来实现的线性数据结构。

它具有先进后出(Last In First Out,LIFO)的特性,即最后入栈的元素最先出栈。

顺序栈的主要操作包括入栈和出栈。

1.入栈操作:将元素添加到栈的末尾,同时更新栈顶指针。

2.出栈操作:从栈的末尾删除元素,同时更新栈顶指针。

3.判空操作:判断栈是否为空,即栈顶指针是否为-1.4.判满操作:判断栈是否已满,即栈顶指针是否达到栈的最大容量。

三、实验过程1.设计顺序栈的数据结构,包括定义栈的最大容量和栈顶指针。

2.实现入栈操作,将元素添加到栈中,并更新栈顶指针。

3.实现出栈操作,从栈中删除元素,并更新栈顶指针。

4.实现判空操作,判断栈是否为空。

5.实现判满操作,判断栈是否已满。

6.编写测试用例,对上述操作进行测试。

四、实验结果经过测试,顺序栈的各项操作均运行正常,符合预期的结果。

五、实验分析1.顺序栈的入栈操作的时间复杂度为O(1),出栈操作的时间复杂度为O(1)。

2.顺序栈的空间复杂度为O(n),其中n为栈的最大容量。

3.顺序栈的优点是结构简单,操作方便快捷。

缺点是无法动态调整栈的大小。

六、实验总结通过本次实验,充分理解了顺序栈的基本操作和特性。

顺序栈在实际应用中具有一定的局限性,但在某些场景下仍然是一种有效的数据结构。

附件:无法律名词及注释:1.数据结构:一种组织和存储数据的方式,旨在提高数据操作的效率和空间利用率。

2.顺序栈:使用数组实现的线性数据结构,具有先进后出的特性。

3.入栈:将元素添加到栈的末尾。

4.出栈:从栈的末尾删除元素。

5.判空:判断栈是否为空。

6.判满:判断栈是否已满。

栈的建立实验报告

栈的建立实验报告

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

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

二、实验内容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. 链式栈实验结果通过编写链式栈的建立和基本操作函数,成功实现了链式栈的入栈、出栈、取栈顶元素、判栈空等操作。

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

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

第1篇一、实验目的1. 理解栈的基本概念和特点;2. 掌握栈的基本操作,如入栈、出栈、判空、求栈顶元素等;3. 通过实际操作加深对栈的理解,提高编程能力。

二、实验内容1. 栈的定义和特点;2. 栈的基本操作;3. 栈的应用实例。

三、实验步骤1. 定义栈的数据结构,包括栈的最大容量、栈顶指针、栈底指针、栈元素类型等;2. 实现栈的基本操作,如入栈、出栈、判空、求栈顶元素等;3. 编写测试程序,验证栈的基本操作是否正确;4. 分析栈的应用实例,加深对栈的理解。

四、实验结果与分析1. 栈的定义和特点栈是一种先进后出(First In Last Out,FILO)的数据结构,它允许在一端进行插入和删除操作。

栈具有以下特点:(1)栈的容量是有限的,通常由数组或链表实现;(2)栈的插入和删除操作都在栈顶进行;(3)栈的元素具有先进后出的特性。

2. 栈的基本操作(1)入栈(Push):将一个元素插入到栈顶;(2)出栈(Pop):从栈顶删除一个元素;(3)判空(IsEmpty):判断栈是否为空;(4)求栈顶元素(Top):获取栈顶元素的值。

以下是栈的基本操作的实现代码:```ctypedef struct {int maxsize; // 栈的最大容量int top; // 栈顶指针int stack[100]; // 栈元素数组} Stack;// 初始化栈void InitStack(Stack s) {s->maxsize = 100;s->top = -1;}// 入栈void Push(Stack s, int x) {if (s->top < s->maxsize - 1) {s->top++;s->stack[s->top] = x;} else {printf("栈已满,无法入栈\n");}}// 出栈int Pop(Stack s) {if (s->top >= 0) {return s->stack[s->top--];} else {printf("栈已空,无法出栈\n"); return -1;}}// 判空int IsEmpty(Stack s) {return s->top == -1;}// 求栈顶元素int Top(Stack s) {if (s->top >= 0) {return s->stack[s->top];} else {printf("栈已空,无栈顶元素\n"); return -1;}}```3. 栈的应用实例(1)括号匹配括号匹配是栈的典型应用之一。

数据结构出栈、入栈实验报告

《数据结构》实验报告院系应用科技学院专业电子信息工程姓名学号10 级电信班2011 年11 月05日1.实验目的1、熟悉栈的定义和栈的基本操作。

2、掌握顺序存储栈和链接存储栈的基本运算。

3、加深对栈结构的理解,逐步培养解决实际能力问题的能力2.需求分析1、栈的建立输入形式和输入值的范围:输入若干个正整数,用空格隔开,以0结束。

2、菜单操作根据提示进行操作。

3.概要设计(1)为了实现上述程序功能,需要第一一个简化的链表抽象数据类型:ADT LinkList {数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai1∈D,i=2,……,n}基本操作:①进栈函数 int Push(SqStack *S, int e)②出栈函数 int Pop(SqStack *S,int *e)③输出栈元素void OutputStack(SqStack *S)④输出栈中的所有元素。

4.详细设计采用链表实现概要设计中的定义的抽象数据类型,有关数据数据类型和伪码算法定义如下:(1)类型定义typedef struct {int *base;int *top;int stacksize;} SqStack(2)基本操作的伪码算法/****************构造一个空栈****************/int InitStack(SqStack &S){S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base) return 0;S.top=S.base;S.stacksize=STACK_INIT_SIZE ;return 1;}int GetTop(SqStack S,int &e){if(S.top==S.base) return 0;e=*(S.top-1);return 1;}/****************入栈函数****************/int Push(SqStack &S,int e){ //插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base) return 0;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return 1;}/****************出栈函数****************/int Pop(SqStack &S,int &e){if(S.top==S.base) return 0;e=*--S.top;return 1;}/****************输出函数****************/int OutputStack(SqStack &S){ //输出栈中所有元素int *p;int i;p=S.top-1;printf("栈中的元素有:");for(i=0;i<S.top-S.base;i++){printf(" %d",*p);p--;}return 1;}5.使用说明程序名为实验1.exe,程序执行过程如下:运行程序显示如下菜单:printf("\n");printf("\t\t\t 顺序栈操作\n");printf("\t\t\t**************************\n");printf("\t\t\t* 0.退出程序! *\n");printf("\t\t\t* 1.读取栈顶元素*\n");printf("\t\t\t* 2.删除栈顶元素*\n");printf("\t\t\t* 3.输出栈中所有元素*\n");printf("\t\t\t**************************\n");printf("请选择菜单号(0-3):");用户输入0~3的数字,选择执行相应的功能。

数据结构实验报告栈

数据结构实验报告:栈摘要:本实验报告旨在介绍栈这一重要的数据结构,以及在实际应用中的使用。

栈是一种先进后出(LIFO)的数据结构,在计算机科学中有着广泛的应用。

本报告将详细介绍栈的定义、基本操作以及应用实例,并根据实验结果进行分析和总结。

1. 引言栈是一种基于线性表的数据结构,具有后进先出(LIFO)的特性。

它可以通过两个基本操作来实现:push(入栈)将元素添加到栈顶,pop(出栈)将栈顶元素移除。

栈在计算机科学中被广泛应用,如函数调用、表达式求值、括号匹配等。

2. 栈的实现栈可以通过数组或链表来实现。

数组实现的栈称为顺序栈,链表实现的栈称为链式栈。

无论是哪种实现方式,都需要实现以下基本操作:- push(element): 将元素添加到栈顶。

- pop(): 移除栈顶元素并返回。

- top(): 返回栈顶元素的值。

- isEmpty(): 判断栈是否为空。

- isFull(): 判断栈是否已满(仅顺序栈需要实现)。

3. 栈的应用3.1 函数调用栈在函数调用中起着关键作用。

每当一个函数被调用时,当前函数的局部变量、返回地址等信息都会被压入栈中。

当函数执行完毕时,这些信息会从栈中弹出,继续执行上一级函数。

3.2 表达式求值栈常用于表达式求值,特别是中缀表达式的转换和计算。

通过将中缀表达式转换为后缀表达式,可以方便地进行计算。

栈可以临时存储运算符,并根据运算符的优先级进行弹出和计算。

3.3 括号匹配栈的一个重要应用是括号匹配。

通过遍历字符串,将左括号压入栈中。

每当遇到右括号时,如果栈顶元素是匹配的左括号,则弹出栈顶元素;否则,表示括号不匹配。

4. 实验结果与分析根据我们对栈的实现和应用进行的实验,以下是我们得到的结论:- 通过数组实现的顺序栈在空间上存在一定的限制,可能会出现栈溢出的情况。

- 通过链表实现的链式栈没有空间限制,可以动态地添加和删除元素。

- 栈在函数调用和表达式求值中展现出了高效的性能,并能够简化程序的设计。

栈的运用实验报告

一、实验目的1. 理解栈的基本概念、特点及逻辑结构;2. 掌握栈的顺序存储和链式存储结构;3. 熟练掌握栈的基本操作,如入栈、出栈、判断栈空等;4. 理解栈在递归算法中的应用;5. 探究栈在实际问题中的应用。

二、实验内容1. 栈的定义与特点2. 栈的顺序存储结构3. 栈的链式存储结构4. 栈的基本操作5. 栈在递归算法中的应用6. 栈在实际问题中的应用三、实验步骤1. 栈的定义与特点(1)栈是一种后进先出(LIFO)的数据结构;(2)栈的元素只能从一端(栈顶)进行插入和删除操作;(3)栈具有两个基本操作:入栈和出栈。

2. 栈的顺序存储结构(1)使用数组来实现栈的顺序存储结构;(2)定义一个数组作为栈的存储空间;(3)定义栈顶指针top,初始值为-1;(4)定义栈的最大容量maxSize。

3. 栈的链式存储结构(1)使用链表来实现栈的链式存储结构;(2)定义一个链表节点,包含数据域和指针域;(3)定义栈顶指针top,初始时指向链表头节点。

4. 栈的基本操作(1)入栈操作:将元素插入到栈顶,栈顶指针向上移动;(2)出栈操作:删除栈顶元素,栈顶指针向下移动;(3)判断栈空:判断栈顶指针是否为-1,是则栈空,否则栈非空。

5. 栈在递归算法中的应用(1)斐波那契数列的递归算法;(2)汉诺塔问题;(3)迷宫问题。

6. 栈在实际问题中的应用(1)括号匹配问题;(2)表达式求值问题;(3)递归函数的调用栈。

四、实验结果与分析1. 栈的定义与特点通过本次实验,我们深入理解了栈的基本概念、特点及逻辑结构,掌握了栈的后进先出特性。

2. 栈的顺序存储结构使用数组实现栈的顺序存储结构,操作简单高效。

在实验过程中,我们实现了栈的基本操作,如入栈、出栈、判断栈空等。

3. 栈的链式存储结构使用链表实现栈的链式存储结构,具有灵活性和扩展性。

在实验过程中,我们实现了栈的基本操作,如入栈、出栈、判断栈空等。

4. 栈的基本操作通过实验,我们熟练掌握了栈的基本操作,如入栈、出栈、判断栈空等,为后续递归算法和实际问题中的应用奠定了基础。

栈的基本操作实验报告

栈的基本操作实验报告实验目的本实验旨在通过使用栈来实现基本的操作,包括入栈、出栈、查看栈顶元素以及判断栈是否为空。

实验原理栈是一种后进先出(Last-In-First-Out)的数据结构,类似于我们平常生活中的堆栈。

栈有两个基本操作:入栈(Push)和出栈(Pop)。

•入栈:将一个元素放入栈的顶部,使其成为新的栈顶元素。

•出栈:移除栈顶元素,并返回该元素的值。

•查看栈顶元素:返回栈顶元素的值,但不将其从栈中移除。

•判断栈是否为空:若栈中没有元素,则栈为空。

实验步骤以下是使用Python语言来实现栈基本操作的步骤。

1. 创建一个空栈首先,我们需要创建一个空栈。

可以使用列表(List)来模拟栈的操作。

例如:stack = []2. 入栈操作接下来,我们可以通过使用append()函数将元素添加到栈的顶部来进行入栈操作。

例如,我们将数字1和2入栈:stack.append(1)stack.append(2)此时栈的内容为:[1, 2],其中2为栈顶元素。

3. 出栈操作要进行出栈操作,我们可以使用pop()函数。

该函数会移除并返回栈顶元素的值。

例如:value = stack.pop()print(value) # 输出:2此时栈的内容为:[1],其中1为新的栈顶元素。

4. 查看栈顶元素要查看栈顶元素的值,我们可以使用索引-1来访问栈的最后一个元素。

例如:value = stack[-1]print(value) # 输出:1此时栈的内容仍为:[1],其中1为栈顶元素。

5. 判断栈是否为空要判断栈是否为空,我们可以使用条件语句结合len()函数来判断栈的长度是否为0。

例如:if len(stack) ==0:print("栈为空")else:print("栈不为空")由于栈中还有一个元素1,所以输出为“栈不为空”。

实验总结通过本实验,我们学习了栈的基本操作,包括入栈、出栈、查看栈顶元素以及判断栈是否为空。

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

序号:《数据结构》题目数据结构出栈、入栈实验报告学院计算机学院专业计算接科学与技术年级班别 12级3 班学号 **********学生姓名朱靖宇指导教师曾孜思路理论设计难度系数代码总成绩20 14 年7 月 6 日1.实验目的1、熟悉栈的定义和栈的基本操作。

2、掌握顺序存储栈和链接存储栈的基本运算。

3、加深对栈结构的理解,逐步培养解决实际能力问题的能力2.需求分析1、栈的建立输入形式和输入值的范围:输入若干个正整数,用空格隔开,以0结束。

2、菜单操作根据提示进行操作。

3.概要设计(1)为了实现上述程序功能,需要第一一个简化的链表抽象数据类型:ADT LinkList {数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai1∈D,i=2,……,n}基本操作:①进栈函数 int Push(SqStack *S, int e)②出栈函数 int Pop(SqStack *S,int *e)③输出栈元素void OutputStack(SqStack *S)④输出栈中的所有元素。

4.详细设计采用链表实现概要设计中的定义的抽象数据类型,有关数据数据类型和伪码算法定义如下:(1)类型定义typedef struct {int *base;int *top;int stacksize;} SqStack(2)基本操作的伪码算法/****************构造一个空栈****************/int InitStack(SqStack &S){S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base) return 0;S.top=S.base;S.stacksize=STACK_INIT_SIZE ;return 1;}int GetTop(SqStack S,int &e){if(S.top==S.base) return 0;e=*(S.top-1);return 1;}/****************入栈函数****************/int Push(SqStack &S,int e){ //插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base) return 0;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return 1;}/****************出栈函数****************/int Pop(SqStack &S,int &e){if(S.top==S.base) return 0;e=*--S.top;return 1;}/****************输出函数****************/int OutputStack(SqStack &S){ //输出栈中所有元素int *p;int i;p=S.top-1;printf("栈中的元素有:");for(i=0;i<S.top-S.base;i++){printf(" %d",*p);p--;}return 1;}5.使用说明程序名为实验1.exe,程序执行过程如下:运行程序显示如下菜单:printf("\n");printf("\t\t\t 顺序栈操作\n");printf("\t\t\t**************************\n");printf("\t\t\t* 0.退出程序! *\n");printf("\t\t\t* 1.读取栈顶元素*\n");printf("\t\t\t* 2.删除栈顶元素*\n");printf("\t\t\t* 3.输出栈中所有元素*\n");printf("\t\t\t**************************\n");printf("请选择菜单号(0-3):");用户输入0~3的数字,选择执行相应的功能。

每执行一次功能,就会显示执行的结果以及执行后顺寻栈的内容。

6.测试结果7. 附录#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{int *base;int *top;int stacksize;}SqStack;/****************构造一个空栈****************/int InitStack(SqStack &S){S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base) return 0;S.top=S.base;S.stacksize=STACK_INIT_SIZE ;return 1;}int GetTop(SqStack S,int &e){if(S.top==S.base) return 0;e=*(S.top-1);return 1;}/****************入栈函数****************/int Push(SqStack &S,int e){ //插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base) return 0;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return 1;}/****************出栈函数****************/int Pop(SqStack &S,int &e){if(S.top==S.base) return 0;e=*--S.top;return 1;}/****************输出函数****************/int OutputStack(SqStack &S){ //输出栈中所有元素int *p;int i;p=S.top-1;printf("栈中的元素有:");for(i=0;i<S.top-S.base;i++){printf(" %d",*p);p--;}return 1;}void main(){SqStack S;int a,b,e;char ch;InitStack(S);printf("请输入要进栈的元素个数是: ");scanf("%d",&a);printf("请输入要进栈的元素: ");for(b=0;b<a;b++){scanf("%d",&e);Push(S,e);}OutputStack(S);printf("\n");do{printf("\n");printf("\t\t\t 顺序栈操作\n");printf("\t\t\t**************************\n");printf("\t\t\t* 0.退出程序! *\n");printf("\t\t\t* 1.读取栈顶元素*\n");printf("\t\t\t* 2.删除栈顶元素*\n");printf("\t\t\t* 3.输出栈中所有元素*\n");printf("\t\t\t**************************\n");printf("请选择菜单号(0-3):");getchar();scanf("%c",&ch);switch(ch){case '1':GetTop(S,e);printf("栈顶元素是: %d\n",e);OutputStack(S);printf("\n");break;case '2':Pop(S,e);printf("删除的栈顶元素是: %d\n",e);OutputStack(S);break;case '3':OutputStack(S);break;case '0':printf("退出程序!\n");break;default:printf("输入错误,请重新输入!\n");break;}if(ch=='0') break;}while(ch!='0');}。

相关文档
最新文档