栈的基本运算(栈和队列)
时间: 1ms 内存:128M
描述:
编写一个程序,实现顺序栈的各种基本运算,主函数已给出,请补充每一种方法。
1、初始化栈s;
2、判断栈s是否非空;
3、进栈一个元素;
4、判读栈s是否非空;
5、输出栈长度;
6、输出从栈顶到栈元素;
7、输出出栈序列;
8、判断栈s是否非空;
9、释放栈;
数据元素类型定义为
typedef char ElemType;
顺序栈的定义为
typedef struct{ElemType data[SizeMax];int top;}SqStack;主函数:int main(){SqStack *s;InitStack(s); //初始化栈if(StackEmpty(s))printf("空\n"); //判断栈是否为空else printf("非空\n");ElemType a,b,c,d,e;cin>>a>>b>>c>>d>>e;Push(s,a); //入栈Push(s,b);Push(s,c);Push(s,d);Push(s,e);if(StackEmpty(s))printf("空\n");else printf("非空\n");printf("栈的长度为%d\n",Length(s)); //输出栈的长度PrintStack(s); //输出从栈顶到栈底的元素Print(s); //输出出栈序列if(StackEmpty(s))printf("空\n");else printf("非空\n");DestroyStack(s); //释放栈return 0;}
输入:
输入五个元素a,b,c,d,e;请根据题目编写算法。
输出:
示例输入:
abcde
示例输出:
空
非空
栈的长度为5
edcba
edcba
非空
提示:
参考答案(内存最优[0]):
#include <iostream>
#include<malloc.h>
#define SizeMax 100
using namespace std;
typedef char ElemType;
typedef struct
{
ElemType data[SizeMax];
int top;
}SqStack;
void InitStack(SqStack *s)
{
s->top=-1;
}
void Push(SqStack *s,ElemType e)
{
s->top++;
s->data[s->top]=e;
}
int StackEmpty(SqStack *s)
{
return (s->top==-1);
}
int Length(SqStack *s)
{
return s->top+1;
}
void PrintStack(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
cout<<s->data[i];
cout<<endl;
}
void Print(SqStack *s)
{
PrintStack(s);
}
void DestroyStack(SqStack *s)
{
free(s);
}
int main()
{
SqStack *s;
s=(SqStack *)malloc(sizeof(SqStack));
InitStack(s); //初始化栈
if(StackEmpty(s))cout<<"空"<<endl; //判断栈是否为空
else cout<<"非空"<<endl;
ElemType a,b,c,d,e;
cin>>a>>b>>c>>d>>e;
Push(s,a); //入栈
Push(s,b);
Push(s,c);
Push(s,d);
Push(s,e);
if(StackEmpty(s))cout<<"空"<<endl;
else cout<<"非空"<<endl;
cout<<"栈的长度为"<<Length(s)<<endl; //输出栈的长度
PrintStack(s); //输出从栈顶到栈底的元素
Print(s); //输出出栈序列
if(StackEmpty(s))cout<<"空"<<endl;
else cout<<"非空"<<endl;
DestroyStack(s); //释放栈
return 0;
}
参考答案(时间最优[0]):
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define SizeMax 105
typedef char ElemType;
typedef struct
{
ElemType data[SizeMax];
int top;
}SqStack;void InitStack(SqStack *&s)
{
s=(SqStack*)malloc(sizeof(SqStack));
memset(s->data,0,sizeof(SqStack));
s->top=-1;
}
int StackEmpty(SqStack *s)
{
return s->top==-1;
}
void Push(SqStack *&s,ElemType x)
{
s->top++;
s->data[s->top]=x;
}
int Length(SqStack *s)
{
return s->top+1;
}
void PrintStack(SqStack *s)
{
for(int i=(int)strlen(s->data)-1;i>=0;i--)
printf("%c",s->data[i]);
printf("\n");
}
void Print(SqStack *s)
{
PrintStack(s);
}
void DestroyStack(SqStack *&s)
{
free(s);
}
int main()
{
SqStack *s;
InitStack(s); //初始化栈
if(StackEmpty(s))printf("空\n"); //判断栈是否为空
else printf("非空\n");
ElemType a,b,c,d,e;
cin>>a>>b>>c>>d>>e;
Push(s,a); //入栈
Push(s,b);
Push(s,c);
Push(s,d);
Push(s,e);
if(StackEmpty(s))printf("空\n");
else printf("非空\n");
printf("栈的长度为%d\n",Length(s)); //输出栈的长度
PrintStack(s); //输出从栈顶到栈底的元素
Print(s); //输出出栈序列
if(StackEmpty(s))printf("空\n");
else printf("非空\n");
DestroyStack(s); //释放栈
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。