栈的共享数据结构Word下载.docx

上传人:b****6 文档编号:16603739 上传时间:2022-11-24 格式:DOCX 页数:14 大小:111.36KB
下载 相关 举报
栈的共享数据结构Word下载.docx_第1页
第1页 / 共14页
栈的共享数据结构Word下载.docx_第2页
第2页 / 共14页
栈的共享数据结构Word下载.docx_第3页
第3页 / 共14页
栈的共享数据结构Word下载.docx_第4页
第4页 / 共14页
栈的共享数据结构Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

栈的共享数据结构Word下载.docx

《栈的共享数据结构Word下载.docx》由会员分享,可在线阅读,更多相关《栈的共享数据结构Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

栈的共享数据结构Word下载.docx

{

datatypedata[maxsize];

inttop[2];

}sqstack;

//定义一个结构体类型的sqstack

sqstacka,*s;

//定义一个结构体类型变量a和指针变量ss

sqstack*init(sqstack*s)//初始化两个栈均为空,s是指向栈类型的指针

s=(sqstack*)malloc(sizeof(sqstack));

//申请空间

s->

top[0]=-1;

//top[1]、top[0]分别是第0和第1个栈

的栈顶指针

top[1]=maxsize;

returns;

}

intpush(sqstack*s,datatypex,intk)//入栈操作,s是栈顶指针,x是要插入的数,k是栈号

if(s->

top[0]+1==s->

top[1])

printf("

\n"

);

两个栈均满,不能进栈!

\n"

//判断是否栈满

return0;

if(k==0)

top[k]++;

//改栈顶指针加1或减1,来选择不满的栈else

top[k]--;

data[s->

top[k]]=x;

//将X插入当前栈顶return1;

intpop(sqstack*s,intk)//出栈操作,栈顶元素由参数x返回

intx;

if((k==0&

&

top[0]==-1)||(k==1&

top[1]==maxsize))

栈空,不能退栈!

\n\n"

return0;

x=s->

top[k]];

//区栈顶元素给Xif(k==0)

//改栈顶指针加1或减1,来选择不满的栈

else

returnx;

voidget(sqstack*s,intl)//元素输入函数,l来判断是否已经建栈

intk=0,x;

while(k==1||k==0)

if(l==0)

栈还未建立!

break;

请选择输入方向,正向(0),方向

(1),结束

(2):

"

//选择要输入的栈号,并

输入元素

scanf("

%d"

&

k);

if(k==0|k==1)

x=0;

请输入数据:

"

while(x!

=-1)

x);

if(x==-1)

break;

push(s,x,k);

voidcheck(sqstack*s)//检测栈内的元素但并不输出

inti,l=0;

while(l==0||l==1)

请选择输出方向,正向(0),方向

(1),结束

(2):

scanf("

l);

if(l==2)break;

elseif((l==0&

top[0]==-1)||(l==1&

continue;

elseif(l==0)

正向数据为:

for(i=0;

i<

=s->

top[l];

i++)

%4d"

s->

data[i]);

printf("

\n\n"

反向数据为:

for(i=maxsize-1;

i>

i--)

voidprint(sqstack*s)//元素输出函数

intx,z=1,f=1,l=0;

请选择输出方向,正向(0),方向

(1):

x=pop(s,l);

if(x==0)

选择'

1'

继续,'

0'

结束输出:

if(l==1)continue;

elsebreak;

正向第%d个:

%d\n"

z,x);

z++;

反向第%d个:

f,x);

f++;

voidmenu()//菜单函数

栈的共享实验\n"

);

==================================\n"

1.栈的建立\n"

2.栈的共享输入\n"

3.栈单个的输出\n"

4.栈的检测\n"

0.退出实验\n"

voidmain()//主函数

inth,k,l=0;

//定义’l’为标志,判断是否已建栈,如未建立l=0,否则l=1

chari;

sqstack*s;

for(;

;

menu();

请选择0--4:

h);

if(h<

0||h>

4)

\n输人错误!

Enter'

y'

tocontunie:

%s"

i);

system("

cls"

elseswitch(h)

case1:

**********************************************\n"

*栈的建立*\n"

s=init(s);

//栈的建立

l=1;

case2:

*******************************************\n"

*栈的共享输入*\n"

******************************************\n"

get(s,l);

//栈的输入

case3:

*栈单个的输出*\n"

***********************************************\n"

print(s);

//栈的单个输出printf("

case4:

*栈的检测*\n"

check(s);

//对栈内元素的检测printf("

case0:

system("

*再见!

*\n"

五、运算结果

结果一:

0号栈输入元素(1,2,3,4,7,8,10),1号栈输入元素(0,5,6)栈的共享实验

Enter‘y’tocontinue:

y(回车)

*栈的共享输入*

请选择输入方向,正向(0),方向

请输入数据:

12347810–1

(1),结束

(2):

0

(回车)

1

056–1(回车)

2

y

*栈的检测*

正向数据为:

12347810

反向数据为:

056

*栈的单个输出*

请选择输出方向,正向(0),方向

(1):

0(回车)

正向第1个:

10

正向第2个:

8

正向第3个:

17

正向第4个:

4

正向第5个:

3

正向第6个:

正向第7个:

栈空,不能退栈!

选择'

继续,'

1(回车)

反向第1个:

6

反向第2个:

5

反向第3个:

栈的共享实验

1.栈的建立

2.栈的共享输入

3.栈单个的输出

4.栈的检测

0.

退

实验

0--4:

2(回车)

0.退出实验

请选择0--4:

请选择输入方向,正向(0),方向

(1),结束

(2):

1234567891011–1(回车)两栈均满,不能进栈!

六、调试小结

函数init(sqstack*s)中少了一条s=(sqstack*)malloc(sizeof(sqstack))语句,这就导致了栈的内存空间无法分配,所以执行出错。

在程序中多加了get(sqstack*s,intl)、check(sqstack*s)、print(sqstack*s)三个函数以便与栈的输入输出以及对栈的检测(不出栈)。

为了在栈的输入之前判断是否已经建栈,在主函数中定义了一个l并定义为0,当l=0

时表示还未建栈,l=1时表示已经建栈。

所以只要将l的值传入get(sqstack*s,intl)函数

中就可以判断在此之前是否已经建栈。

七、疑问

对标志l的赋值只能放在建栈函数s=init(s)之后,而不能放在它的前面。

如下:

s=init(s);

正确

错误!

l的值任然为0,不赋值为1printf("

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

当前位置:首页 > 幼儿教育 > 育儿知识

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

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