《算法与数据结构》实验报告实验3__栈与队列的应用

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

《算法与数据结构》实验报告

姓名学号专业班级计算机类1301

实验3栈与队列的应用

指导教师实验名称

实验目的

●了解并掌握栈与队列的概念与定义

●能够实现并运用栈与队列

●熟练运用栈与队列的基本操作

●使用栈实现回溯算法

实验环境

●个人计算机一台,CPU主频1GHz以上,1GB以上内存,2GB以上硬盘

剩余空间。

●Windows2000、Windows XP或Win 7操作系统

●Code::Blocks(版本12.11或近似版本,英文版),或VC++ 6.0

实验内容

1 基本部分(必做)

1.链式栈的创建与操作

设链式栈中元素的数据类型为整型,编写函数实现以下操作:

(1)链式栈的初始化

(2)链式栈的输出(从栈顶到栈底)

(3)链式栈的判空操作

(4)链式栈入栈操作

(5)链式栈的出栈操作

(6)取栈顶元素的值

注:链式栈可不带头节点

源代码:ds6.c 2.循环队列的创建与操作

设循环队列中元素的数据类型为整型,编写函数实现以下操作:

(1)循环队列的初始化

(2)循环队列的入栈

(3)循环队列的出栈

(4)取循环队列的栈顶元素

(5)循环队列的输出(从栈顶到栈底)

源代码:ds7.c 3.符号平衡问题

在语言中往往需要判断一些符号是否是成对出现的,比如{}、[]、()。如何让判断符号的对称也是很多语言的语法检查的首要任务。

设计一个函数来检查表达式中的符号()、[]、{}是否平衡。若平衡,返回1;若不平衡返回0。

例如:

a(dda){[dfsafd[dfsd]](((fdsd)dfd))dfd}是符号平衡的。

{ad[x(df)ds)]}不是符号平衡的。

源代码:ds8.c

实验代码:

1.

#include

#define MAXSIZE maxlen

typedef int elemtype;

typedef struct stacknode

{

elemtype data;

struct stacknode *next;

}StackNode;

typedef struct

{

StackNode *top;

}LinkStack;

int *InitStack(LinkStack *S);//初始化链式栈

int *Push(LinkStack *S);//入栈函数

int *view(LinkStack *S);//输出函数

int *Pop(LinkStack *S);//出栈函数

int StackTop(LinkStack *S);//取栈顶函数

main()

{

LinkStack *S;

int a;

char k;

S=InitStack(S);

if(S->top==NULL)

{

printf("该链式栈为空!");

}

Push(S);

printf("按任意键开始出栈!");

getchar();

getchar();

Pop(S);

a=StackTop(S);

printf("栈顶元素为%d",a);

printf("程序运行完毕,是否重新运行(y/n):");

scanf("%s",&k);

if(k=='y')

{

main();

}

}

int *InitStack(LinkStack *S)

{

S=(LinkStack*)malloc(sizeof(LinkStack));

S->top=NULL;

return(S);

}

int *Push(LinkStack *S)

{

int n,i,item;

StackNode *p;

printf("请输入即将入栈的数据个数:");

scanf("%d",&n);

for(i=0;i

{

printf("请输入第%d个数:",i+1);

scanf("%d",&item);

p=(LinkStack*)malloc(sizeof(StackNode));

p->data=item;

p->next=NULL;

p->next=S->top;

S->top=p;

}

view(S);

return(S);

}

int *view(LinkStack *S)

{

StackNode *p;

if(S->top==NULL)

{

printf("链式栈为空!");

return(0);

}

else printf("该链式栈从栈顶到栈底数据如下:\n");

for(p=S->top;p!=NULL;p=p->next)

{

printf("%d\n",p->data);

}

}

int *Pop(LinkStack *S)

{

StackNode *p;

int item;

char k;

p=S->top;

if(S->top==NULL)

{

printf("链式栈为空!");

return(0);

}

else

{

item=p->data;

printf("出栈数据为%d\n",item);

S->top=p->next;

free(p);

view(S);

}

printf("是否继续出栈(y/n):");

scanf("%s",&k);

if(k=='y')

{

Pop(S);

}

else return(S);

}

int StackTop(LinkStack *S)

{

if(S->top==NULL)

相关文档
最新文档