栈的表示及实现 实验报告.docx

上传人:b****2 文档编号:16921660 上传时间:2023-04-24 格式:DOCX 页数:11 大小:97.83KB
下载 相关 举报
栈的表示及实现 实验报告.docx_第1页
第1页 / 共11页
栈的表示及实现 实验报告.docx_第2页
第2页 / 共11页
栈的表示及实现 实验报告.docx_第3页
第3页 / 共11页
栈的表示及实现 实验报告.docx_第4页
第4页 / 共11页
栈的表示及实现 实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

栈的表示及实现 实验报告.docx

《栈的表示及实现 实验报告.docx》由会员分享,可在线阅读,更多相关《栈的表示及实现 实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

栈的表示及实现 实验报告.docx

栈的表示及实现实验报告

班级信工082学号200806030202姓名李霄实验组别

实验日期2010-12-20室温报告日期2010-12-20成绩

报告内容:

(目的和要求,原理,步骤,数据,计算,小结等)

实验名称:

实验二栈的表示及实现

实验目的:

1、通过实验进一步理解栈的“先进后出”特性。

2、掌握栈的逻辑结构,以及顺序存储结构和链式存储结构。

3、熟练运用C语言实现栈的基本操作。

4、灵活运用栈解决实际问题。

实验内容:

已知学生数据元素的数据类型如下:

StructStudent{

intID;/*学号*/

charname[10];/*姓名*/

};

1、请设计4个学生数据,学号分别为10,20,30,40,并把这些数据依次入顺序栈,然后出栈并在屏幕上显示出来。

2、入栈两个学生数据,然后出栈一个学生数据,再次入栈两个学生数据,然后出栈3个学生数据,并与1的结果进行比较。

3、如何操作能得到“20,40,30,10”的结果。

4、使用与1同样的学生数据,并把这些数据依次入链栈,然后出栈并在屏幕上显示出来,与1的结果比较看是否一样。

5、请设计一个能够测试栈空和栈满的实验。

实验学时、:

2学时

实验程序

#include"malloc.h"

#include"conio.h"

#include"stdio.h"

#defineSTACKSIZE100

typedefintDataType;

typedefstruct{

DataTypeitems[STACKSIZE];

inttop;

}SqStack;

typedefstructSNode{

DataTypedata;

structSNode*next;

}SNode,*LinkStack;

structstudent

{

intID;

charname[10];

};

structstudentstu[4]={{10,"li"},{20,"song"},{30,"xiao"},{40,"hang"}};

main()

{

sheji1();

printf("\nanrenyijianjinxingsheji2\n");

getchar();

sheji2();

printf("\nanrenyijianjinxingsheji3\n");

getchar();

sheji2();

printf("\nanrenyijianjinxingsheji4\n");

getchar();

sheji4();

printf("\nanrenyijianjinxingsheji5\n");

getchar();

sheji5();

}

sheji1()

{

SqStacksta;

inti,e;

intlength=4;

InitStack(&sta);

for(i=0;i

Push(&sta,stu[i].ID);

printf("chuzhanshunxu1wei:

\n");

while(!

StackEmpty(sta))

{Pop(&sta,&e);

printf("%d\t",e);

}

}

sheji2()

{inti,e;

SqStacksta;

InitStack(&sta);

for(i=0;i<2;i++)

Push(&sta,stu[i].ID);

printf("chuzhanshunxu2wei:

\n");

Pop(&sta,&e);

printf("%d\t",e);

for(i=2;i<4;i++)

Push(&sta,stu[i].ID);

while(!

StackEmpty(sta))

{

Pop(&sta,&e);

printf("%d\t",e);

}

}

sheji4()

{

inti,e;

int*top;

InitStack1(&top);

for(i=0;i<4;i++)

Push1(top,stu[i].ID);

if(!

StackEmpty1(top))

{

Pop1(top,&e);

printf("%d\t",e);

}

}

sheji5()

{

inti=1,e;

SqStacksta;

int*top;

InitStack(&sta);

if(StackEmpty(sta))printf("zhanweikong");

if(!

StackEmpty(sta))

{Pop1(top,&e);

i++;

}

if(i==STACKSIZE)printf("zhanweiman");

}

intInitStack(SqStack*sta)

{

sta->top=-1;

return1;

}

intStackEmpty(SqStacksta)

{

if(sta.top==-1)

return1;

else

return0;

}

intPush(SqStack*sta,inte)

{

if(sta->top>=STACKSIZE-1)

{

printf("errors\n");

return0;

}

sta->top++;

sta->items[sta->top]=e;

return1;

}

intPop(SqStack*sta,int*e)

{

if(sta->top<=-1)

{

printf("cuowu\n");

return0;

}

*e=sta->items[sta->top];

sta->top--;

return1;

}

intInitStack1(LinkStack*top)

{

*top=(LinkStack)malloc(sizeof(SNode));

if(*top==NULL){printf("cuowu");return0;}

(*top)->next=NULL;

return1;

}

intPush1(LinkStacktop,DataTypee)

{

SNode*p;

p=(SNode*)malloc(sizeof(SNode));

if(!

p){printf("cuowu");return0;}

p->data=e;

p->next=top->next;

top->next=p;

return1;

}

intPop1(LinkStacktop,DataType*e)

{SNode*p;

if(!

top->next)

{printf("cuowu");

return0;

}

p=top->next;

top->next=p->next;

*e=p->data;

free(p);

return1;

}

intStackEmpty1(LinkStacktop)

{

if(top->next==NULL)

return1;

elsereturn0;

}

实验步骤

1、WIN-TC开发环境安装与配置

1)首先在网上下载WIN-TC的版本;

2)下载完成后进行安装,安装路径默认就可以了,一路next就ok了;

3)打开WIN-TC会出现如下界面;

2、在WIN-TC中输程序,源代码见算法流程。

3、在运行中点编译连接。

4、运行后显示编译成功即没有错误,如图:

5、点确定后再在运行中点编译连接并运行,并出现如下窗口:

6、点击确定后出现如下窗口:

7、按回车后显示:

8、按回车显示如图:

9、按回车显示如图:

10、按回车显示如图:

实验结果:

通过实验步骤中的截图可以看出本次实验所编译的程序能够实验实验内容中的要求。

心得体会:

通过本次实验,使我区分了顺序栈和链栈,同时对顺序栈的定义、入栈、出栈等程序的编译及其调用有所了解,并且对链栈的定义、入栈、出栈等程序的编译及其调用有所掌握,并对其结构通过运行的过程中有所掌握。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1