链栈的有关操作.docx

上传人:b****6 文档编号:6377059 上传时间:2023-01-05 格式:DOCX 页数:7 大小:35.64KB
下载 相关 举报
链栈的有关操作.docx_第1页
第1页 / 共7页
链栈的有关操作.docx_第2页
第2页 / 共7页
链栈的有关操作.docx_第3页
第3页 / 共7页
链栈的有关操作.docx_第4页
第4页 / 共7页
链栈的有关操作.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

链栈的有关操作.docx

《链栈的有关操作.docx》由会员分享,可在线阅读,更多相关《链栈的有关操作.docx(7页珍藏版)》请在冰豆网上搜索。

链栈的有关操作.docx

链栈的有关操作

实验3:

栈的链接结构的有关操作

班级:

信息管理学号:

L11214022姓名:

吴翔翔日期:

2014-4-28

1.实验题目

请编制一个程序,利用栈的链接存储方式来实现下列功能:

(1)初始化链栈;

(2)入栈;

(3)通过入栈操作,编写一个n个元素连续入栈的算法:

LinkStack*setup_stack(intn),算法返回栈的头指针;

(4)输出一个链栈的所有元素;

(5)判断栈是否非空;//若栈空返回值为1,否则返回值为0

(6)入栈

2.需求分析

本演示程序在VC++6.0环境下编写调试,完成初始化链栈,将一个元素入栈及出栈,,多个元素连续入栈,还有判断栈是否为空等操作。

3、概要设计

A:

主函数main()

主函数里需要调用上述函数,大体思路是先调用初始化函数,然后输出“需要入栈的元素个数n”提示,接着进行n作为实参的值的输入,然后调用(3)中的那个setup_stack函数,输出栈中所有元素值,进行出栈几次,在输出栈中元素值。

B:

初始化函数*initstack()

主要是对栈进行初始化。

C:

输出栈中元素函数print(linkstack*top)

D:

入栈函数*push(linkstack*top,datatypex)

E:

出栈函数*pop(linkstack*top)

4.调试分析

主要叙述本程序调试过程的中所遇到主要问题及其体会:

本程序基本上与单链表相似,只不过其所有操作都限定在栈头进行操作。

本程序的基本操作并不太难,关键在于它的头指针唯一标示了该栈,调用子函数时有时无法进行,则必是头指针调用出了问题。

在调试过程中试了好多次,最后才成功。

5.测试结果(运行结果)

 

A:

初始化*initstack()

 

B:

n个元素连续入栈*setup_stack(linkstack*top,intn)

C:

一个元素入栈*push(linkstack*top,datatypex)

D:

元素出栈*pop(linkstack*top)

E:

判断栈是否非空;//若栈空返回值为1,否则返回值为0

 

6.源程序(带注释)

程序清单

#include

#include

#include

#definemaxsize50

typedefintdatatype;

/*typedefstruct{

datatypestack[maxsize];

inttop;

}seqstack;*/

typedefstructnode{

datatypedata;

structnode*next;

}linkstack;

 

//初始化函数

linkstack*initstack()

{

linkstack*top;

top=NULL;

returntop;

}

//输出栈中元素函数

voidprint(linkstack*top)

{linkstack*p;

p=top;

if(p==NULL)printf("empty");

else

{

do

{printf("%6d",p->data);

p=p->next;

}while(p!

=NULL);

printf("\n");

}

}

//出栈函数

linkstack*push(linkstack*top,datatypex)

{

linkstack*p;

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

p->data=x;

p->next=top;

top=p;

returntop;

}

intstackempty(linkstack*top)

{return(top?

0:

1);

}

//n个元素连续入栈函数

linkstack*setup_stack(linkstack*top,intn)

{inti,x;

for(i=0;i

{scanf("%d",&x);

top=push(top,x);

}

print(top);

returntop;

}

linkstack*pop(linkstack*top)

{linkstack*q;

if(!

top){printf("栈为空");}

q=top;

top=top->next;

free(q);

returntop;

}

 

//主函数

voidmain()

{linkstack*top;

inti,x,k,n;

 

do{

printf("\n\n\n");

printf("\n====================================");

printf("\n\t1.初始化链栈;");

printf("\n\t2.将一个元素入栈");

printf("\n\t3.n个元素连续入栈");

printf("\n\t4.输出栈所有元素");

printf("\n\t5.判断栈是否非空;//若栈空返回值为1,否则返回值为0");

printf("\n\t6.出栈");

printf("\n=====================================");

printf("\n\t请输入您的选择(1、2、3、4、5、6)");

scanf("%d",&k);

switch(k)

{

case1:

{printf("已初始化链栈!

");

top=initstack();

}break;

case2:

{printf("请输入元素x值:

");

scanf("%d",&x);

top=push(top,x);

printf("输入元素后栈变为:

");

print(top);

}break;

case3:

{printf("请输入要入栈的元素个数n=:

");

scanf("%d",&n);

top=setup_stack(top,n);

}break;

case4:

{printf("当前栈中元素为");

print(top);

}break;

case5:

{printf("%d",stackempty(top));

}break;

case6:

{printf("出栈前栈中元素为:

");print(top);

top=pop(top);

printf("出栈后剩余栈中元素为:

");

print(top);

}break;

}

}while(k!

=0);

}

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

当前位置:首页 > 工程科技 > 交通运输

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

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