栈和队列的基本操作实现及其应用

  • 格式:doc
  • 大小:49.00 KB
  • 文档页数:16

下载文档原格式

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

实验二栈和队列的基本操作实现及其应用

一_一、实验目的

1、熟练掌握栈和队列的基本操作在两种存储结构上的实现。

一_二、实验内容

题目一、试写一个算法,判断依次读入的一个以@为结束符的字符序列,是否为回文。所谓“回文“是指正向读和反向读都一样的一字符串,如“321123”或“ableelba”。

相关常量及结构定义:

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef int SElemType;

typedef struct SqStack

{ SElemType *base;

SElemType *top;

int stacksize;

}SqStack;

设计相关函数声明:

判断函数:int IsReverse()

栈:int InitStack(SqStack &S )

int Push(SqStack &S, SElemType e )

int Pop(SqStack &S,SElemType &e)

int StackEmpty(s)

一_三、数据结构与核心算法的设计描述

1、初始化栈

/* 函数功能:对栈进行初始化。参数:栈(SqStack S)。

成功初始化返回0,否则返回-1 */

int InitStack(SqStack &S)

{

S.base=(SElemType *)malloc(10*sizeof(SElemType));

if(!S.base) //判断有无申请到空间

return -1; //没有申请到内存,参数失败返回-1

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

S.base=new SElemType;

return 0;

}

2、判断栈是否是空

/*函数功能:判断栈是否为空。参数; 栈(SqStack S)。栈为空时返回-1,不为空返回0*/

int StackEmpty(SqStack S)

{

if(S.top==S.base) return -1;

else return 0;

}

3、入栈

/*函数功能:向栈中插入元素。参数; 栈(SqStack S),元素(SElemtype e)。成功插入返回0,否则返回-1 */

int Push(SqStack &S,SElemType e)

{

if(S.top-S.base>=S.stacksize)

{

S.base=(SElemType *)realloc(S.base,(S.stacksize+1) * sizeof(SElemType));

//重新分配空间

if(!S.base) return -1;

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e; //插入操作

return 0;

}

4、出栈

/*函数功能:在栈中删除元素。参数;栈(SqStack S),元素(SElemtype e)。成功删除返回0,否则返回-1 */

int Pop(SqStack &S,SElemType &e)

{

if(S.top==S.base) return -1;

e=*--S.top; //删除操作

return 0;

}

5、判断是否为回文

/*函数功能:判断栈中的字符串是否为回文。参数; 栈(SqStack S)。是回文时返回1,否则返回0*/

int IsReverse(SqStack &S)

{

int i;

char a;

for(i=0;i

{

Pop(S,a);

if(a!=b[i]) return 0;

}

return 1;

}

一_四、函数的调用

主函数主要设计:

int lpp;

char ch;

SqStack p;

InitStack(p);

cout<<"请输入字符:";

while((ch=cin.get())&&ch!='@')

{

Push(p,ch);

b[j]=ch;

j++;

}

if (StackEmpty(p)==-1)

{

cout<<"此为空栈"<

return 0;

}

lpp=IsReverse(p);

if(lpp==0) cout<<"此字符串不是回文。"<

else cout<<"此字符串是回文。"<

一_五、实验总结

通过这次试验我熟悉了对栈的基本操作,对基本的栈操作有了很好的掌握,知道自己容易在什么地方出错,。

一_六、程序清单

#include

using namespace std;

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

char b[STACK_INIT_SIZE+STACKINCREMENT];

int j=0;

typedef char SElemType;

typedef struct SqStack

{ SElemType *base;

SElemType *top;

int stacksize;

}SqStack;

int InitStack(SqStack &S)

{

S.base=(SElemType *)malloc(10*sizeof(SElemType));

if(!S.base) return -1;

S.top=S.base;

相关主题