顺序栈的各种基本运算顺序栈的各种基本运算实验内容与要求:
编写一个程序,实现顺序栈的各种基本运算,并在基础上完成以下功能:
1)初始化顺序栈;
2)判断顺序栈是否为空;
3)依次进栈元素a,b,c,d,e;
4)判断顺序栈是否为空;
5)输出栈长度;
6)输出从栈顶到栈底的元素;
7)读出栈顶元素;
8)删除栈顶元素;
9)输出从栈顶到栈底的元素;
10)判断顺序栈是否为空;
11)释放栈。
代码如下:
#include
#include
#include
#define TRUE 1
#defi...
顺序栈的各种基本运算实验内容与要求:
编写一个程序,实现顺序栈的各种基本运算,并在基础上完成以下功能:
1)初始化顺序栈;
2)判断顺序栈是否为空;
3)依次进栈元素a,b,c,d,e;
4)判断顺序栈是否为空;
5)输出栈长度;
6)输出从栈顶到栈底的元素;
7)读出栈顶元素;
8)删除栈顶元素;
9)输出从栈顶到栈底的元素;
10)判断顺序栈是否为空;
11)释放栈。
代码如下:
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define NULL 0
#define OVERFLOW -2
typedef int Status;
typedef char SElemType;
Status visit(SElemType e);
#define STACK_INIT_SIZE 100 // 栈存储空间的初始分配量
#define STACKINCREMENT 10 // 存储空间分配增量
typedef struct {
SElemType *base; // 存储数据元素的数组
SElemType *top; // 栈顶指针
int stacksize; // 当前分配的栈空间大小,以sizeof(SElemType)为单位}SqStack;
Status InitStack (SqStack &S) {
// 构造一个空栈S
S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!S.base) exit (OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}// InitStack
Status DestroyStack (SqStack &S) {
// 销毁栈S
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}// DestroyStack
Status StackEmpty (SqStack S) {
// 判断栈S是否为空
if(S.top==S.base)
return TRUE;
else
return FALSE;
}// StackEmpty
Status Push (SqStack &S, SElemType e) {
// 插入元素e为新的栈顶元素
if (S.top - S.base >= S.stacksize) {
// 栈满,追加存储空间
S.base = (SElemType *) realloc(S.base,
(S.stacksize + STACKINCREMENT) * sizeof (SElemType));
if (!S.base) exit (OVERFLOW); //存储分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}// Push
int StackLength (SqStack S) {
// 返回S的元素个数,即栈的长度
return S.top-S.base;
}// StackLength
Status GetTop (SqStack S, SElemType &e) {
// 若栈不空,则用e返回S的栈顶元素
if(S.top==S.base) return ERROR;
e = *(S.top-1);
return OK;
}// GetTop
Status Pop (SqStack &S, SElemType &e) {
// 若栈不空,则删除S的栈顶元素
if(S.top==S.base) return ERROR;
e= * --S.top;
return OK;
}// Pop
Status StackTraverse (SqStack S, Status( *visit)(SElemType)) { // 遍历栈
while(S.top!=S.base)
visit(*--S.top);
return OK;
}// StackTraverse
void main() {
// 主函数
SElemType e;
SqStack S;
printf("(1)初始化顺序栈。\n");
InitStack(S);
printf("(2)判断顺序栈是否为空:\n");
StackEmpty(S);
printf("(3)依次进栈元素a,b,c,d,e:\n");
Push(S,'a');
Push(S,'b');
Push(S,'c');
Push(S,'d');
Push(S,'e');
printf("(4)判断顺序栈是否为空:\n");
StackEmpty(S);
printf("(5)输出栈长度:%d\n",StackLength(S));
printf("(6)输出从栈顶到栈底的元素:\n");
StackTraverse(S,visit);
printf("(7)读出栈顶元素:%d\n",GetTop(S,e));
printf("(8)删除栈顶元素:%d\n",Pop(S,e));
printf("(9)输出从栈顶到栈底的元素:\n");
StackTraverse(S,visit);
printf("(10)判断顺序栈是否为空\n");
StackEmpty(S);
printf("(11)释放栈。");
DestroyStack(S);
}
本文档为【顺序栈的各种基本运算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。