桂电数据结构实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}