数据结构试验(回文判断)

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

目录1、实验题目

2、实验目的

3、实验要求

4、算法设计分析

5、测试调节

6、总结

7、代码附录

1、实验名称:

栈和队列的基本操作及其应用(回文判断)

2、实验目的:

1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。

2、掌握栈和队列的特点,即后进先出和先进先出的原则。

3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序

存储结构和链式存储结构上的实现。

3、算法设计分析:

(1)栈的初始化:

void Init_stack(SqStack &S)

{

S.base= (char *)malloc(STACK_INIT_SIZE * sizeof(char));

if(!S.base) exit(OVERFLOW);

S.top=S.base; //栈顶与栈尾指针指向栈尾

S.stacksize=STACK_INIT_SIZE;

// return 0;

}

(2)入栈

void Push(SqStack &S,char e){

if(S.top-S.base>=S.stacksize) //首先判满

{

S.base=(char

*)realloc(S.base,(S.stacksize+STACKINCREASE)*sizeof(char));

if(!S.base) exit(OVERFLOW);

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

S.stacksize+=STACKINCREASE;

}

*S.top++ =e; //入一个元素,栈顶指针增加1

}

(3)出栈:

char Pop(SqStack &S,char&e){

if(S.top==S.base) exit(OVERFLOW);

e= *--S.top; //删除栈顶元素并用e返回其值

return e;

}

(3)回文判断

/*void Compare(SqStack &S)

{

int i,n=0;

int t=0;

char ch[100];

char m,e;

char p;

cout<<"请输入您要进行的判断的字符以#作为结束标志: \n"; for(i=0;i<100;i++)

{

cin>>p;

if(p!='#') //作为结束标志

{ch[i]=p;}

else

{n=i;break;}

}

for(int h=0;h

{Push(S,ch[h]);}

for(int w=0;w

{

//cout<<"debug";

m=Pop(S,e); //这个地方有错误//出栈

//cout<

//cout<<"debug";

if(m==ch[w]) //比较字符是否与输入的字符相同

{t++;}

if(t==n)

{cout<<"输入的字符串是回文编码!";}

else

{cout<<"输入的字符串不是回文编码!";}

}*/

*********************《算法改进》*************************** for(i=0;i<100;i++)

{

cin>>ch[i];

if(ch[i]=='#')

break;

Push(S,ch[i]);

n++;

for(i=0;i

{

m=Pop(S,e);

if(m!=ch[i])

break;

t++;

}

if(t==n/2)

{cout<<"输入的字符串是回文编码!";}

else

{cout<<"输入的字符串不是回文编码!";}

}

(4)测试调节:

(5)总结:

通过对回文判断的代码编写,对栈的更加了解,初始化(开辟空间),入栈、出栈等更加的了解。但是编写这个代码没有用到队列,以后在课下时间,会编写一个更复杂的代码,加以熟悉。总的来说,做这个小程序,对栈确实有了进一步的了解,一些基本的操作也更加的熟悉,为以后的课设打下基础。

(6)代码附录:

#include

#include

#include

#include

#define STACK_INIT_SIZE 100

#define STACKINCREASE 10

#define OVERFLOW 0

//using namespace std;

typedef struct{

char *base;

char *top;

int stacksize;

}SqStack;

void Init_stack(SqStack &S)

{

S.base= (char *)malloc(STACK_INIT_SIZE * sizeof(char));

if(!S.base) exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

// return 0;

相关文档
最新文档