桂电数据结构实验报告

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

实验二栈和队列及应用

一、实验目的

1.掌握用c语言实现队列和栈的方法

2.了解栈和队列的使用

二、实验内容

实验题目一

在许多语言现象中,常见到一种形如abcba的文字,这种文字从左到右读和从右到左读结果是一样的,这种文字就是常说的回文。设计一个程序可以判断给定的一个文字是否是回文。注意:在本实验中,要求在实现上面的题目时,必须使用如下算法:

考虑到栈的先进后出以及队列的后进先出,可以结合这两种结构来实现需要的功能,即将文字分别入队和入栈,然后依次通过出队和出栈输出判断是否有不相同的字符,一旦发现就证明文字不是一个回文。

实验步骤:

第一步:编写程序,实现栈,该栈可以用数组实现,也可以用链表实现

第二步:编写程序,实现队列,该队列可以为循环队列,也可以用链表实现

第三步:编写主算法,使用自己编写的栈和队列实现回文判断问题(通过键盘输入一个以#结束的字符串,进行判断)

#include

#include

struct Node;

typedef struct Node * PNode;

struct Node

{

char info;

PNode link;

};

struct LinkStack //定义栈

{

PNode top;

};

typedef struct LinkStack * PLinkStack;

struct LinkQuene //定义队列

{

PNode f;

PNode r;

};

typedef struct LinkQuene *PLink;

PLinkStack CreateStackLink () //创建空栈

{

PLinkStack ptop;

ptop=(PLinkStack)malloc(sizeof(struct LinkStack));

if (ptop==NULL)

{

printf ("申请空间失败!\n");

exit(-1);

}

ptop->top=NULL;

return ptop;

}

PLink CreateLink () //创建空队列{

PLink pl;

pl=(PLink)malloc(sizeof(struct LinkQuene));

if (pl==NULL)

{

printf ("申请空间失败!\n");

exit (-1);

}

pl->f=NULL;

pl->r=NULL;

return pl;

}

void PushLink (PLinkStack pl,char c)//进栈

{

PNode p;

p=(PNode)malloc(sizeof(struct Node));

if (p==NULL)

{

printf ("申请空间失败!\n");

exit(-1);

}

p->info=c;

p->link=pl->top;

pl->top=p;

}

void PushQuene (PLink pl,char c) //进队列{

PNode p;

p=(PNode)malloc(sizeof(struct Node));

if (p==NULL)

{

printf ("申请空间失败!\n");

exit (-1);

}

p->info=c;

p->link=NULL;

if (pl->f==NULL)

pl->f=p;

else

pl->r->link=p;

pl->r=p;

}

void GetLink (PLinkStack pl) //出栈

{

PNode p;

p=(PNode)malloc(sizeof(struct Node));

if (pl->top==NULL)

{

printf ("空栈!\n");

exit(-1);

}

if (p==NULL)

{

printf ("申请空间失败!\n");

exit(-1);

}

p=pl->top;

pl->top=pl->top->link;

free (p);

}

void GetQuene (PLink pl) //出队列{

PNode p;

p=(PNode)malloc(sizeof(struct Node));

if (pl->f==NULL)

{

printf ("空队列!\n");

exit(-1);

}

if (p==NULL)

{

printf ("申请空间失败!\n");

exit(-1);

}

p=pl->f;

pl->f=p->link;

free (p);

}

char GetLinkData (PLinkStack pl) //获得栈顶数值

{

if (pl->top==NULL)

{

printf ("空栈!\n");

exit(-1);

}

return pl->top->info;

}

char GetQueneData (PLink pl) //获得队列头部数值{

if (pl->f==NULL)

{

printf ("空队列!\n");

exit(-1);

}

return pl->f->info;

}

void PrintLink (PLinkStack pl) //打印栈

{

PNode p;

p=(PNode)malloc(sizeof(struct Node));

if (p==NULL)

{

printf ("申请空间失败!\n");

exit(-1);

}

相关文档
最新文档