您的位置:首页 > 理论基础 > 数据结构算法

3.1实现顺序栈的各种基本运算

2018-02-07 16:36 274 查看
注意:GetTop函数与Pop函数的比较,只是少了s->top++

程序代码:

sqstack.cpp

//顺序栈基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;

typedef struct
{
ElemType data[MaxSize];
int top; //栈指针
} SqStack; //顺序栈类型

void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}

void DestroyStack(SqStack *&s)
{
free(s);
}

bool StackEmpty(SqStack *s)
{
return(s->top==-1);
}

bool Push(SqStack *&s,ElemType e)
{
if (s->top==MaxSize-1) //栈满的情况,即栈上溢出
return false;
s->top++;
s->data[s->top]=e;
return true;
}

bool Pop(SqStack *&s,ElemType &e)
{
if (s->top==-1) //栈为空的情况,即栈下溢出
return false;
e=s->data[s->top];
s->top--;
return true;
}

bool GetTop(SqStack *s,ElemType &e)
{
if (s->top==-1) //栈为空的情况,即栈下溢出
return false;
e=s->data[s->top];
return true;
}

exp3-1.cpp

#include"sqstack.cpp"
int main()
{
ElemType e;
SqStack *s;
char ch[5]={'a','b', 'c','d','e'};
int i=0;
int length =5;
printf("\n");
printf(" (1)初始化栈\n");
InitStack(s);
printf(" (2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf(" (3)依次进栈元素a,b,c,d,e\n");
while(i<length)
{ Push(s,ch[i]);
i++;
}

printf(" (4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf(" (5)出栈序列:");
while(!(StackEmpty(s)))
{
Pop(s,e);
printf(" %c ",e);
}
printf("\n");
printf(" (6)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf(" (7)销毁栈\n");
DestroyStack(s);

}
运行截图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息