题目要求:
1、设栈采用顺序存储结构(用动态数组),请编写栈的各种基本操作的实现函数,并存放在头文件test7.h中。同时建立一个验证操作实现的主函数文件test7.cpp,编译并调试程序,直到正确运行。
提示:
⑴ 栈的动态数组顺序存储结构可定义如下:
struct Stack {
ElemType *stack ; // 存栈元素
int top; // 栈顶指示器
int MaxSize; // 栈的最大长度
};
⑵ 栈的基本操作可包括:
① void InitStack (Stack &S); //构造一个空栈 S
② int EmptyStack (Stack S); //若栈S为空栈返回1,否则返回0
③ void Push(Stack &S, ElemType item); //元素 item进栈
④ ElemType Pop(Stack &S); //栈S的栈顶元素出栈并返回
⑤ ElemType Peek(Stack S); //取栈S的当前栈顶元素并返回
⑥ void ClearStack (Stack &S); //清除栈s,使成为空栈
2、应用:写一函数,判断给定的字符串是否中心对称。如字符串“abcba”、“abccba”均为中心对称,字符串“abcdba”不中心对称。要求利用test7.h中已实现的有关栈的基本操作函数来实现。请把该函数添加到文件test7.cpp中的主函数前,并在主函数中添加相应语句进行测试。函数原型如下:
int IsReverse(char *s) //判断字符串S是否中心对称,是返回1,否则返回0
Test7.h的代码如下:
struct Stack {
ElemType *stack ; // 存栈元素
int top; // 栈顶指示器
int MaxSize; // 栈的最大长度
};
void InitStack (Stack &S) //初始化堆栈
{
S.MaxSize=10;
S.stack=(ElemType *) malloc(S.MaxSize *sizeof(ElemType)); //申请动态空间
if (!S.stack) { //假如空间分配失败
cerr<<"动态分配失败!"<<endl;
exit(1);
}
S.top=-1; //栈顶指示
}
int EmptyStack (Stack S) //判断是否是空栈
{
return S.top == -1;
}
void Push(Stack &S, ElemType item) //把元素压入堆栈
{
if(S.top == S.MaxSize-1){ //若栈满,扩大两倍空间
S.stack = (ElemType *) realloc( S.stack, 2*S.MaxSize*sizeof(ElemType) ); //继续申请空间
S.MaxSize= 2*S.MaxSize;
}
S.top ++;
S.stack[S.top ] = item;
}
ElemType Pop(Stack &S) //栈S的栈顶元素出栈并返回
{
if (S.top==-1)
{
cerr<<"栈已空无数据元素出栈!"<<endl;
exit(1);
}
S.top--;
return S.stack[S.top+1];
}
ElemType Peek( Stack S ) //取栈S的当前栈顶元素并返回
{
if (S.top==-1) //栈已空
{
cerr<<"栈已空无数据元素出栈!"<<endl;
exit(1);
}
return S.stack[S.top];
}
void ClearStack( Stack &S ) //销毁堆栈
{
if (S.stack)
{
free(S.stack); //释放空间
S.stack = NULL;
}
S.top = -1;
S.MaxSize = 0;
}
Test7.cpp 的代码如下:
#include <iostream.h>
#include <stdlib.h>
typedef char ElemType;
#include "test7.h"
int IsReverse(char *s)
{
Stack t;
InitStack(t); //初始化堆栈
int i,j,res=1,x=0;
while(s[x]!='\0'){
x++;
if(EmptyStack(t))
for(j=0;j<x;j++)
Push(t,s[j]);
}
cout<<"出栈字符为:"<<Peek(t)<<endl;
for(i=0;i<x/2;i++){
if(s[i]==Pop(t))
continue;
else{
res=0;
break;
}
return res; //返回标志
}
ClearStack(t);
}
void main()
{
char a[80]; //定义数组
int i=0;
cout<<"输入字符串,以#为结束:"<<endl;
cin>>a[0];
while(a[i]!='#'){
i++;
cin>>a[i]; //输入线性表
}
a[i]='\0'; //线形表末尾
if(IsReverse(a))
cout<<"字符串中心对称"<<endl;
else
cout<<"字符串非中心对称"<<endl;
}
分享到:
相关推荐
数据结构课程作业,堆栈的基本操作,如出栈、入栈、取栈顶元素等
ARM体系结构数据类型级及寄存器堆栈操作实验报告主要涵盖了嵌入式系统中对ARM处理器的理解和应用。ARM架构是一种广泛应用于嵌入式系统和移动设备的精简指令集计算机(RISC)架构,以其高效能和低功耗而著称。在这个...
本篇文章将详细探讨堆栈链表和队列链表的基本操作。 首先,让我们了解堆栈(Stack)的概念。堆栈是一种后进先出(LIFO,Last In First Out)的数据结构,类似于日常生活中的叠盘子。在堆栈中,最后加入的元素将是第...
总的来说,理解和熟练掌握堆栈和队列的基本操作是成为优秀IT专业人员的必要步骤。它们不仅在理论上有重要价值,而且在实际编程中扮演着不可或缺的角色。通过实验,学生能够加深对这两种数据结构的理解,提高编程技能...
ARM 堆栈操作是 ARM 架构中的一种基本操作方式,了解 ARM 堆栈操作是学习 ARM 的基础。下面是关于 ARM 堆栈操作的详细说明: 一、ARM 堆栈组织结构 ARM 堆栈组织结构是满栈降的形式,满栈即 sp 是要停留在最后一个...
1. **基本操作**: - **压栈(Push)**:当一个新元素被添加到堆栈时,它会被放置在现有元素的顶部。这相当于在一堆物品上再放一件,新的总是最上面的。 - **弹栈(Pop)**:弹栈操作从堆栈顶部移除并返回元素。因为...
### 数据结构:堆栈与队列的基本操作 #### 一、引言 在计算机科学领域,数据结构是组织和管理数据的重要方式之一。其中,堆栈(Stack)和队列(Queue)作为两种特殊的线性数据结构,在各种应用场景中扮演着重要的...
堆栈的基本操作包括压栈(Push)、弹栈(Pop)、查看栈顶元素(Peek)和调整栈顶指针(Stack Pointer)。压栈意味着将一个元素添加到栈顶,而弹栈则从栈顶移除并返回该元素。堆栈通常用于临时存储数据,例如在函数...
本压缩包包含了一系列关于堆栈、树、链表和字符串的基本操作的代码例题,这些都是程序员必备的知识点。 首先,我们来看堆栈(Stack)。堆栈是一种“后进先出”(LIFO)的数据结构,常用于实现函数调用、表达式求值...
### 操作系统中的堆栈的经典解释 在计算机科学与软件工程领域中,堆栈(Stack)与堆(Heap)是两种极为重要的内存管理机制。它们不仅对于编程语言的设计至关重要,而且直接影响程序运行时的性能与稳定性。本文将...
创建一个空堆栈的基本语法是: ```cpp #include std::stack<int> myStack; ``` 这将创建一个可以存储整数的堆栈。如果你想使用自定义的数据结构,你可以提供一个容器作为模板参数,例如`std::deque`或`std::...
数据结构课程实验实训报告--堆栈和队列的基本操作 本实验报告的目的是掌握堆栈和队列数据构造描述,学会针对堆栈和队列的根本操作。通过实验,我们可以掌握 C 语言构造化程序设计思想,构造数据类型,指针数据类型...
堆栈的基本概念 - **定义**:堆栈是一种特殊的线性数据结构,其特点是只允许在一端进行插入或删除操作,通常称为栈顶(top)。堆栈遵循后进先出(LIFO, Last In First Out)的原则。 - **用途**:在程序设计中,堆栈被...
堆栈及静态数据区详解
这样的设计就模拟了堆栈的基本操作:压栈(Push)和弹栈(Pop)。 描述中提到的“堆栈动作机”可能是一个特定的程序或者模块,它使用LabVIEW来实现堆栈的操作,并可能包含了其他与之相关的功能,如错误处理、数据...
堆栈类的实现通常涉及到一系列基本操作,如压栈(Push)、弹栈(Pop)、查看栈顶元素(Peek)等。以下是对给定C++源代码中堆栈类实现的详细解析。 #### 基本概念 堆栈是一种线性数据结构,其插入和删除操作仅在表...
在本篇文章中,我们将详细介绍如何在MIPS中实现基本的堆栈操作,并通过一个具体的例子——字符串反转程序来展示这些操作的实际应用。 #### 堆栈指针与初始化 在MIPS架构中,寄存器$29通常被用作堆栈指针寄存器($sp...
此外,实验还提到了“栈的操作”,这意味着除了上述的基本操作外,可能还涉及了其他栈的应用,如深度优先搜索(DFS)、回溯算法、函数调用栈等。在实际编程中,堆栈常用于处理递归、存储中间计算结果、网页浏览历史...
本文将深入探讨MIPS体系结构的基本概念,以及在该架构下如何进行堆栈操作。 首先,让我们了解MIPS体系架构的核心组成部分。MIPS架构主要包括以下几个部分: 1. **寄存器**:MIPS处理器有32个通用寄存器,分别命名...
首先,堆栈的基本操作包括压栈(push)、弹栈(pop)、查看栈顶元素(peek)以及检查栈是否为空(isEmpty)。在计算表达式时,我们通常需要处理两种类型的符号:操作符和操作数。操作符有优先级,比如乘法和除法的...