顺序栈的数据结构如下:
typedef struct
{
ElemType data[MaxSize]; //栈数据
int top; //栈顶指针
}SqStack;
实现下列函数:
void InitStack(SqStack* &s); //初始化栈
void DestroyStack(SqStack* &s); //销毁栈
int StackLength(SqStack* s); //求栈的长度
int StackEmpty(SqStack* s); //栈是否为空
int Push(SqStack* &s,ElemType e); //进栈
int Pop(SqStack* &s,ElemType &e); //出栈
int GetTop(SqStack* s,ElemType &e); //取栈顶元素
void DispStack(SqStack* s); //输出栈
具体实现代码:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define ElemType int
#define MaxSize 1000
#define GET_ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))
using namespace std;
typedef struct
{
ElemType data[MaxSize]; //栈数据
int top; //
}SqStack;
void InitStack(SqStack* &s); //初始化栈
void DestroyStack(SqStack* &s); //销毁栈
int StackLength(SqStack* s); //求栈的长度
int StackEmpty(SqStack* s); //栈是否为空
int Push(SqStack* &s,ElemType e); //进栈
int Pop(SqStack* &s,ElemType &e); //出栈
int GetTop(SqStack* s,ElemType &e); //取栈顶元素
void DispStack(SqStack* s); //输出栈
void InitStack(SqStack* &s){
s=(SqStack* )malloc(sizeof(SqStack));
s->top=-1;
}
void DestroySqStack(SqStack* &s){
free(s);
}
int StackLength(SqStack* s){
return (s->top+1);
}
int StackEmpty(SqStack* s){
return (s->top==-1);
}
void DispStack(SqStack* s){
for(int i=s->top;i>-1;i--)
cout<<s->data[i]<<" ";
cout<<endl;
}
int Push(SqStack* &s,ElemType e){
if(s->top+1==MaxSize)return -1;
else{
s->data[s->top+1]=e;
s->top++;
return 1;
}
}
int Pop(SqStack* &s,ElemType &e){
if(s->top==-1)return -1;
else{
e=s->data[s->top];
s->top--;
return 1;
}
}
int GetTop(SqStack* s,ElemType &e){
if(s->top==-1)return -1;
else {
e=s->data[s->top];
return 1;
}
}
int main(){
int i=0;
ElemType e;
SqStack* s=NULL;
ElemType a[]={3,76,4,25,7,8,2,43,212};
InitStack(s);
for(int i=0;i<GET_ARRAY_LENGTH(a);i++){
Push(s,a[i]);
DispStack(s);
}
GetTop(s,e);
cout<<e<<" "<<StackLength(s)<<" "<<endl;
for(int i=0;i<GET_ARRAY_LENGTH(a);i++){
Pop(s,a[i]);
DispStack(s);
}
return 0;
}
代码运行 结果如下: