顺序栈的数据结构如下:
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; }
原文地址:http://blog.csdn.net/whu_sky/article/details/41121679